Androidのは、問題RecyclerView更新データをDiffUtilの契約を使用しています

背景

  1. RecyclerView.Adapter#notifyDataSetChanged() たびに全体のレイアウトが更新されます。
  2. 毎回手動で起動RecyclerView.Adapter#notifyItemXxシリーズ方法が煩雑です。
  3. 必要に応じてではなく、重複を挿入するよりも、新しいプロジェクトで、古いリスト項目にのみ更新されたコンテンツを繰り返します。

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への更新の違い

ステップ

  1. 実装するクラスを作成しますDiffUtil.Callback
  2. 新しいデータの到着、コールバックは、カスタム、古いものと新しい着信トランザクションをインスタンス化すると、
  3. コールのスレッドでDiffUtil#calculateDiffの差を計算。
  4. 結果の違いDiffResultにRecyclerView.Adapterに更新。

もっと

  • 使用するandroid.support.v7.recyclerview.extensions.ListAdapterと、android.support.v7.recyclerview.extensions.AsyncListDiffer

おすすめ

転載: www.cnblogs.com/lshare/p/11333993.html