背景
RecyclerView.Adapter#notifyDataSetChanged()
たびに全体のレイアウトが更新されます。- 毎回手動で起動
RecyclerView.Adapter#notifyItemXx
シリーズ方法が煩雑です。 - 必要に応じてではなく、重複を挿入するよりも、新しいプロジェクトで、古いリスト項目にのみ更新されたコンテンツを繰り返します。
DiffUtil
DiffUtil
それは生まれデータRecyclerVeiwを更新する操作を簡単にすることです。次のようにキークラスとメソッドは、次のとおりです。
カテゴリ | 方法 | 説明 |
---|---|---|
DiffUtil | パブリック静的DiffResult calculateDiff(コールバックCB) | 差コールバック新旧データリストによって提供されたデータの分析、DiffResultを返します |
DiffUtil.Callback | パブリック抽象int型getOldListSize() | 古いデータの数を返します。 |
パブリック抽象int型getNewListSize() | 新しいデータの数を返します。 | |
パブリック抽象ブールareItemsTheSame(int型oldItemPosition、int型newItemPosition) | 2つのデータ項目が同じであるかどうかを決定 | |
パブリック抽象ブールareContentsTheSame(int型oldItemPosition、int型newItemPosition) | (2つのデータ項目が同じである場合、)同一の2つのデータ項目、または内容を更新する必要があるかどうかを判断します | |
DiffUtil.DiffResult | 公共ボイドdispatchUpdatesTo(最終RecyclerView.Adapterアダプタ) | RecyclerView.Adapterへの更新の違い |
ステップ
- 実装するクラスを作成します
DiffUtil.Callback
。 - 新しいデータの到着、コールバックは、カスタム、古いものと新しい着信トランザクションをインスタンス化すると、
- コールのスレッドで
DiffUtil#calculateDiff
の差を計算。 - 結果の違い
DiffResult
にRecyclerView.Adapterに更新。
もっと
- 使用する
android.support.v7.recyclerview.extensions.ListAdapter
と、android.support.v7.recyclerview.extensions.AsyncListDiffer