【Kotlin/Android Studio】RecyclerViewを更新する方法!notifyItemChangedの使い方

この記事からわかること

  • Android Studio/KotlinRecyclerView更新する方法
  • アイテム更新削除した際にリロードする
  • notifyItemChangedメソッド使い方

index

[open]

\ アプリをリリースしました /

みんなの誕生日

友達や家族の誕生日をメモ!通知も届く-みんなの誕生日-

posted withアプリーチ

参考文献:公式リファレンス:RecyclerView.Adapter

環境

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)
}

まだまだ勉強中ですので間違っている点や至らぬ点がありましたら教えていただけると助かります。

ご覧いただきありがとうございました。

searchbox

スポンサー

ProFile

ame

趣味:読書,プログラミング学習,サイト制作,ブログ

IT嫌いを克服するためにITパスを取得しようと勉強してからサイト制作が趣味に変わりました笑
今はCMSを使わずこのサイトを完全自作でサイト運営中〜

New Article

index