RecyclerViewをプロが使用するためのヒント。 パート1

RecyclerViewをプロが使用するためのヒント。パート1


この記事を書くことにしました 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を記述する必要があります。


標準のgetItemViewTypeおよびonCreateViewHolder


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


CreateViewHolderにアップロード


この手法は、常に使用することはできません。 場合によっては、選択した各layout内で、さまざまなケースでより複雑なロジックが必要になることがあります。 ただし、これが当てはまらない場合、返されるlayoutは、さまざまなタイプのviewコンポーネントを操作する正しい方法です。


4. DiffUtil


DiffUtilを使用して新しいデータをRecyclerViewに追加します。


recyclerViewのデータが変更されるたびに、ほとんどの開発者はnotifyDataSetChanged()メソッドを呼び出して、更新されたデータをUIに表示します。 彼らは、この方法がリソース集約型であること、そしてこれがDiffUtilがはるかに効率的に処理する場所であることを単純に知りません。


DiffUtilは、2つのリストの差を更新リストとして計算し、最初のリストを2番目のリストに変換できるユーティリティクラスです。 recyclerViewアダプターで更新を計算するために使用できます。 DiffUtilを使用するには、 DiffUtilを実装する必要があります。これには、 DiffUtilロジックを実装するために必要ないくつかのメソッドがあります。


パブリックメソッドDiffUtil.Callback


DiffUtilの最大の利点は、 RecyclerViewでは、リスト全体を再描画する代わりにTextView特定の要素のTextView内の特定のテキストを更新できることTextView 。 これを行うには、 onChangePayloadメソッドを実装する必要があります。 このテーマに関する非常に良い記事があります。


2番目の部分では、 RecyclerView活用するためのその他のヒントを見ていきます。


→RecyclerViewを専門的に使用するためのヒント。 パート2



Source: https://habr.com/ru/post/J425945/


All Articles