DiffUtilのgetChangePayloadで返したオブジェクトをどう使うか

DiffUtilのgetChangePayloadでは、古いアイテムと新しいアイテムでどのフィールドが更新されたかの情報を詰めたオブジェクトを生成して返す。

どんな感じなのかは以下のサイトを参照。

このreturnするPayloadがどこで使われるかちゃんとわかって無かったのだけど、onBindViewHolder(ViewHolder holder, int position, List<Object> payloads)payloadsで参照できる。

RecyclerView.Adapter  |  Android Developers

areItemsTheSame(int, int)trueを返し、areContentsTheSame(int, int)falseを返すなら、新旧のitemエンティティ(一意に識別できるオブジェクト)自体は同じだが、そのオブジェクトの持つデータが異なる。

どのデータが新しいデータで更新されたかをgetChangePayloadでオブジェクトにして返してやり、onBindViewHolder(ViewHolder holder, int position, List<Object> payloads)でpayloadsから更新内容を取得してViewを部分的に更新してやればゼロからViewを構築するよりコストが下がる。

この時アニメーションを掛けて更新すると良い感じになる。なるほど。