Unyablog.

のにれんのブログ

norifyDataSetChanged でアニメーションする in RecyclerView

stackoverflow.com

  • RecyclerView.Adapter#getItemId()ユニークな ID を返す
  • RecyclerView.Adapter#setHasStableIds(true) を行う

これだけで RecyclerView.Adapter#notifyDataSetChanged() のみでもいい感じにアニメーションしてくれます。

パフォーマンスも良くなります。

ttps://www.reddit.com/r/androiddev/comments/2lr8bf/what_does_recyclerview_sethasstableids_do_and_why/*1

StackOverflow では supportsPredictiveItemAnimations()true を返すようにする必要があると書いてありますが、 Support Library 23.4.0 時点の LinearLayoutManager では必要ありませんでした。

実演

getItemId()ユニークなID(今回はデータの primary key) を返し、全て notifyDataSetChanged() で変更を伝えています。

毎回 notifyDataInserted() 等を呼ぶよりも簡単にできて便利。

*1:reddit リンク入れると投稿失敗するみたいなので h 抜いています