RecyclerViewアダプタでデータを更新する最適な方法 [duplicate]
2023-11-19 16:15:38
質問
クラシックアダプタに リストビュー で使用する場合、ListView のデータをこのように更新します。
myAdapter.swapArray(data);
public swapArray(List<Data> data) {
clear();
addAll(data);
notifyDataSetChanged();
}
のベストプラクティスを知りたいのですが。
RecyclerView
. なぜなら
RecyclerView
アダプタでは
clear
と
addAll
のように
リストビュー
.
というわけで、試しに
notifyDataSetChanged
だけで試してみましたが、うまくいきませんでした。
そこで、ビューにswapAdapterを設定してみました。
List<Data> data = newData;
MyRecyclerAdapter adapter = new MyRecyclerAdapter(data);
// swapAdapter on my recyclerView (instead of a .setAdapter like with a classic listView).
recyclerViewList.swapAdapter(adapter, false);
しかし、この最後の解決策では、まだアダプタの新しいインスタンスを作成する必要があり、最良の解決策ではないように感じます。データを変更するだけなら、新しい
MyRecyclerAdapter
.
どのように解決するのですか?
RecyclerViewのAdapterには、ListViewのAdapterにあるようなメソッドがあまりありません。しかし、あなたのスワップは非常に簡単に次のように実装することができます。
class MyRecyclerAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
List<Data> data;
...
public void swap(ArrayList<Data> datas)
{
data.clear();
data.addAll(datas);
notifyDataSetChanged();
}
}
という違いもあります。
list.clear();
list.add(data);
と
list = newList;
一つ目は同じリストオブジェクトを再利用していること。もうひとつは、リストの再参照と参照です。到達できなくなった古いリスト オブジェクトはガベージ コレクションされますが、最初にヒープ メモリを積み上げることなく回収されることはありません。これは、データをスワップするたびに新しいアダプタを初期化するのと同じことでしょう。
関連
-
[解決済み】recyclerview アダプタが添付されていないため、レイアウトをスキップしています。
-
[解決済み] ViewPager PagerAdapter がビューを更新しない
-
[解決済み】RecyclerView Adapterのデータを更新する方法
-
[解決済み】Android ListViewの行の追加・削除をアニメーション化する方法
-
[解決済み] Android Webview - キャッシュを完全に削除する
-
[解決済み] TabLayoutに対応したandroidデザインでタブテキストのフォントを変更する
-
[解決済み] AsyncTaskを複数回実行する
-
[解決済み] EditTextの右側のDrawableにonClickListenerを設定する [重複] [重複
-
[解決済み] ViewPager2でスワイプを無効にするには?
-
[解決済み] Recyclerviewと異なるタイプの行のインフレーションの処理
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】RecyclerView Adapterのデータを更新する方法
-
[解決済み] android: imageview の画像を画面に合わせて伸縮させる
-
[解決済み] プログラムでソフトキーボードを開く
-
[解決済み] TabLayoutに対応したandroidデザインでタブテキストのフォントを変更する
-
[解決済み] Androidのadb logcatでTAG名で特定のメッセージを除外する方法は?
-
[解決済み] 通知をクリックした後にアプリケーションを開く
-
[解決済み] 非ActivityクラスでContextを取得する [重複].
-
[解決済み] Android StudioからADBを手動で再起動する方法
-
[解決済み] react nativeアプリのバージョン番号を更新する方法
-
[解決済み] Gradleでビルドタイプを使用し、ContentProviderを使用する同じアプリを1つのデバイスで実行する。