
この記事を書くことにしました Googleがかなり前にリリースしたにもかかわらず、多くの開発者がRecyclerViewを使用するときにミスをすることに気付きました。
ここで説明するポイントは、Google Devsのさまざまなレポートや資料で言及されています。
この記事では、 このビデオの重要なポイントについて簡単に説明しますが、今すぐ見る必要はありません。 しかし、私は記事を読んだ後、完全に見ることを推奨します。
1. setHasFixedSize属性
recyclerViewがその子を動的にサイズ変更する予定がない場合、属性recyclerView.setHasFixedSize(true)設定します。
その結果、リストアイテムでデータが更新されるたびにrecyclerViewは再描画されず、このアイテム自体が再描画されます。
2.クリックリスナー
onCreateViewHolder(...)でクリックハンドラーを設定します。
ユーザーがリスト項目をクリックするたびに、 viewHolderはこのクリックが発生したアダプターの位置を報告します( vh.getAdapterPosition() )。 エレメントはアダプター内で移動でき、関連付けられたviewコンポーネントは再作成されないため、これは重要です。
その結果、 viewコンポーネントが作成されるまでに、次のことが発生する可能性があります。たとえば、リストアイテムは位置2にありますが、ユーザーがクリックすると、要素はすでに位置5になります。したがって、 vh.getAdapterPosition()正しいリストインデックスが受信されるようにします。
3.さまざまなタイプのビューコンポーネントの使用
異なるタイプのviewコンポーネント(たとえば、 R.layout.view_one )を使用する場合は、 layout直接返しlayout 。
アダプターがさまざまなタイプのviewコンポーネントをサポートしている場合、 getItemViewTypeおよびonCreateViewHolderは以下の画像のようになります。 対応するタイプのviewコンポーネントに必要なロジックを実装するには、 onCreateViewHolderメソッド内にswitchを記述する必要があります。

ただし、これらのタイプの代わりに、すぐにlayoutを返すことができます。 これにより、 onCreateViewHolderボイラープレートコードがonCreateViewHolder 。

この手法は、常に使用することはできません。 場合によっては、選択した各layout内で、さまざまなケースでより複雑なロジックが必要になることがあります。 ただし、これが当てはまらない場合、返されるlayoutは、さまざまなタイプのviewコンポーネントを操作する正しい方法です。
4. DiffUtil
DiffUtilを使用して新しいデータをRecyclerViewに追加します。
recyclerViewのデータが変更されるたびに、ほとんどの開発者はnotifyDataSetChanged()メソッドを呼び出して、更新されたデータをUIに表示します。 彼らは、この方法がリソース集約型であること、そしてこれがDiffUtilがはるかに効率的に処理する場所であることを単純に知りません。
DiffUtilは、2つのリストの差を更新リストとして計算し、最初のリストを2番目のリストに変換できるユーティリティクラスです。 recyclerViewアダプターで更新を計算するために使用できます。 DiffUtilを使用するには、 DiffUtilを実装する必要があります。これには、 DiffUtilロジックを実装するために必要ないくつかのメソッドがあります。

DiffUtilの最大の利点は、 RecyclerViewでは、リスト全体を再描画する代わりにTextView特定の要素のTextView内の特定のテキストを更新できることTextView 。 これを行うには、 onChangePayloadメソッドを実装する必要があります。 このテーマに関する非常に良い記事があります。
2番目の部分では、 RecyclerView活用するためのその他のヒントを見ていきます。
→RecyclerViewを専門的に使用するためのヒント。 パート2