しばらくの間、RececlerView
とViewHolder
パターンを使用しました。カスタムAdapter
を実装しています。
私は私のコードで特定のバグヘルプを検索していません。
リストの最後までスクロールして上にスクロールしているときに、onBindViewHolder
メソッドが(同じアイテムに対して)複数回呼び出されるのが普通であるかどうか疑問に思っていました。この場合、アイテム0と1に対してonBindViewHolder
が再度呼び出されます(リストには合計7つのアイテムが含まれます)
Datasatが変更されたことを通知せずに、このメソッドが再度呼び出される可能性はありますか?
私は少し混乱しています。
よろしく、パーム
はい、RecyclerView
がonBindViewHolder()
を複数回呼び出すことは完全に正常です。
RecyclerView
は、画面全体に表示するのに必要な最小数のViews
のみを作成します。また、古い/作成されたViews
を再利用することで機能します。そのため、下にスクロールすると、上にスクロールしているときに非表示になっていたビューが削除され、最後に表示されたView
の横に表示され、そこに追加されます。ただし、View
は現在古いデータにバインドされているため、onBindViewHolder()
が再度呼び出され、レンダリング前にView
が正しいデータのみにバインドされていることを確認します。
同様に、onCreateViewHolder()
は必要なViews
の正確な最小数のみと呼ばれることに気付くでしょう。
RecyclerView
がどのように機能するかをよりよく理解するために、Recycler、LayoutManager、およびRecycler.AdapterのRecyclerView
の3つのコア部分を読むことをお勧めします。