【Kotlin/Android Studio】RecyclerViewを更新する方法!notifyItemChangedの使い方
この記事からわかること
- Android Studio/KotlinでRecyclerViewを更新する方法
- アイテムを更新、削除した際にリロードする
- notifyItemChangedメソッドの使い方
index
[open]
\ アプリをリリースしました /
友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-
posted withアプリーチ
参考文献:公式リファレンス:RecyclerView.Adapter
環境
- Android Studio:Flamingo
- Kotlin:1.8.20
RecyclerViewの更新処理
RecyclerViewはAndroidアプリで大量のデータをリスト表示する際に使用できるViewGropeですRecyclerViewはビューを破棄せず新しいアイテムに再利用するため、パフォーマンスの大幅な改善とアプリの応答性の向上、消費電力の軽減が期待できます。
RecyclerViewで表示している元データリストが更新や追加、削除、移動など動きがあった際にはRecyclerViewに対して変化があったことを伝えることでビューが再描画され反映されるような仕組みになっています。そして伝えるためのNotify(通知)メソッドが状況に応じてRecyclerView.Adapter
に複数用意されています。
種類 | メソッド | 更新対象 |
---|---|---|
更新 | notifyDataSetChanged() | データ全体 |
更新 | notifyItemChanged(position: Int) | 特定の位置のアイテム |
更新 | notifyItemRangeChanged( positionStart: Int, itemCount: Int) |
複数の更新されたアイテム |
更新 | notifyItemChanged( int position,Object payload) |
特定の位置のアイテムのpayload |
追加 | notifyItemInserted(position: Int) | 追加されたアイテム |
追加 | notifyItemRangeInserted( positionStart: Int, itemCount: Int) |
複数の追加されたアイテム |
削除 | notifyItemRemoved(position: Int) | 削除されたアイテム |
削除 | notifyItemRangeRemoved( positionStart: Int, itemCount: Int) |
複数の削除されたアイテム |
移動 | notifyItemMoved( fromPosition: Int, toPosition: Int) |
移動されたアイテム |
notifyDataSetChanged:データ全体の更新
void notifyDataSetChanged()
notifyDataSetChanged
はRecyclerViewで表示しているアイテムが全て更新されたことを通知するメソッドです。LayoutManager
は通知を受け取ると表示されているすべてのビューを再バインドして再レイアウトします。
何かしらの変化が起きた時に汎用的に使用することができますが処理的には重くなるので基本的には後述する変化が起きた箇所のみを通知するメソッドを使用することが推奨されています。
public fun updateItem(position: Int) {
if (position < 0 || position >= _dataList.size) {
return
}
val item = _dataList[position]
viewModel.updateData(item.id,item.name)
notifyDataSetChanged()
}
notifyItemChanged(position: Int):特定の位置のデータ更新
void notifyItemChanged (int position)
notifyItemChanged(position: Int)
はRecyclerViewで表示している特定の位置のアイテムが更新されたことを通知するメソッドです。引数にはInt
型で更新したいアイテムの位置を指定します。
public fun updateItem(position: Int) {
if (position < 0 || position >= _dataList.size) {
return
}
val item = _dataList[position]
viewModel.updateData(item.id,item.name)
notifyItemChanged(position)
}
notifyItemRangeChanged(positionStart: Int, itemCount: Int):複数のデータ更新
void notifyItemRangeChanged (int positionStart, int itemCount)
notifyItemChanged(positionStart:,itemCount:)
はRecyclerViewで表示している特定の位置のアイテムから指定した数値分のアイテムが更新されたことを通知するメソッドです。引数にはInt
型で更新するアイテムの開始位置と開始位置から数えた更新するアイテム数を指定します。
public fun updateItemsInRange(startPosition: Int, itemCount: Int) {
for (i in startPosition until (startPosition + itemCount)) {
// アイテムのテキストを変更
items[i] = "Updated Item $i"
}
// 変更を通知
notifyItemRangeChanged(startPosition, itemCount)
}
まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。
ご覧いただきありがとうございました。