Android Kotlin基礎講座 07.1:RecyclerViewの基礎
目次
概念:RecyclerView
リスト、または格子状のデータを表示することはAndroidにおける最も一般的なUIタスクの一つです。リストはシンプルなものから、とても複雑なものまであります。テキストビューのリストはショッピングリストのような単純なものを表示するかもしれません。はたまた休暇中の目星をつけておいたお出かけ先リストのような複雑なリストは、ヘッダーやスクロールする格子状のデータの中にさらに詳細を含んでいる場合もあります。
このようなユースケースの全てに対応するために、AndroidはRecyclerViewウィジェットを用意しています。
RecyclerViewの大きな利点の一つは、大きなリストに対してとても効率が良いという点です。
- デフォルトでは、RecyclerViewは現在画面上に表示されているアイテムを処理したり、描写するといった処理のみを行います。たとえば、もしあなたのリストが1000個の要素をもっていて、表示するのはそのうちの10個だけだったとすると、RecyclerViewは10個のアイテムのみを描写するように処理します。ユーザーがスクロールすると、RecyclerViewは次にどのアイテムが画面に描写されるべきかを判断し、それらのアイテムのみを描写するように無駄のない処理を行います。
- アイテムが画面外にでると、そのアイテムのビューは再利用されます。つまり、そのアイテムは新しく画面に表示される次のアイテムの表示用に使われるということです。
このRecyclerViewの挙動は莫大な処理時間を省いてくれ、スムーズにリストをスクロールできるようにしてくれます。 - あるアイテムが変わるとき、全体のリストを再描写するのではなく、RecyclerViewはそのアイテム一つだけを更新します。これは複雑なアイテムのリストを表示するときに効率性を大きく向上するのに役立ちます。
以下の一連の流れの画像中に、ABCと書かれたビューがあります。そのビューが画面外にスクロールされると、RecyclerViewはそのビューを新しいデータであるXYZ用に再利用します。
Adapterパターン
コンセントのタイプが違う国間を旅行する際、あなたは恐らく自分の端末をアダプターを使ってコンセントに接続する方法を知っていると思います。アダプターはプラグのタイプを別のタイプに変換してくれます。つまりあるインターフェースを別のインターフェースに変換しているということです。
ソフトウェア開発におけるAdapterパターンとはあるオブジェクトが別のAPIと動作する手助けをしてくれるものです。RecyclerViewはアプリのデータをRecyclerViewが表示することができるように変換するためのアダプターを使っています。アプリがどのようにデータを保存したり、処理するかといった部分を変更することなしにです。TrackMySleepQualityアプリ用では、ViewModelを変更することなく、Roomデータベースから、RecyclerViewが表示することができるようにデータを適合させてくれるアダプターを作成します。
RecyclerViewの実装
RecyclerView内でデータを表示するためには、以下のものが必要になります。
- 表示するためのデータ。
- レイアウトファイルに定義されたRecyclerViewインスタンス。ビュー用のコンテナとして機能します。
- データのアイテムごとのレイアウト。もし全てのリストアイテムが同じ見た目である場合、それらすべてに同じレイアウトを使用することができますが、必須ではありません。アイテムビューが作成されると同時にデータも含まれるようにするために、アイテムレイアウトはフラグメントのレイアウトとは別に作られる必要があります。
- ビューホルダー。ビューホルダーはViewHolderクラスを継承しています。これはアイテムレイアウトのアイテムを表示するために必要なビュー情報を含んでいます。また、ビューホルダーはRecyclerViewがビューを画面上で効率よく動かすために使う情報を追加します。
- アダプター。アダプターはデータとRecyclerViewをつないでくれます。アダプターはデータがViewHolder内で表示されるようにデータを適合させてくれます。RecyclerViewはどのようにして画面上にデータを表示するかを知るためにアダプターを利用します。