0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ListViewの基本

Last updated at Posted at 2017-12-17

ListViewについて基本を整理しようと思いまとめました。

公式ドキュメント
ListView | Android Developers

ちなみに、もともとRecyclerViewについて知りたくて調べ始めたため、以下、ListViewとRecyclerViewで共通のことだけ書いています。

ListViewについて

ListViewはViewをリスト表示するためのView。
※つまり、「(行となる子の)Viewをリスト表示する(親の)View」がListViewということになる)

さらにただリスト表示させてスクロールできるだけではなくて、スクロールアウトして表示されなくなった子Viewを再利用することでメモリの消費を抑えている。

Adapter

ListView自体には、

  • ある行の子Viewの内容
  • 全行数

などの情報は保持されない。
それを保持するためにAdapterと呼ばれるクラスを別につくって、onCreate()などの時に渡すことになっている。
公式ドキュメント アダプタを使ったレイアウトをビルドする

ある行に当たる子Viewは大体自作されることが多く、その場合はAdapterも自作のクラスになるので、基本Adapterは自作するものと思っていい。
※自作というか、以下のインターフェースを実装する。
Adapter | Android Developers

Adapterに以下のようなメソッドを持たせておく。

  • getView()
  • 一行分のViewを作って返させる
  • add()
  • 一行分のViewのもとになる情報(データを保持したPOJOとか)を与える

呼び出し側のActivityのonCreate()などでは、Adapter.add()によって情報を渡しておき、ListView.setAdapter()でAdapterを設定することで、画面に表示がされることになる。

ViewHolder

普通に上記のAdapter.getView()を実装しようとした場合、行となる子Viewに含まれるTextViewなどの実際のViewをいちいちfindViewByIdで探しては、そこにPOJOなどのモデルクラスから得た情報を設定する必要がある。
findViewByIdのコストが割と高いので、そのままだとパフォーマンスが上がらない処理になる。

このため、ViewHolderと呼ばれるクラスを別途自作しておいて、そこにfindViewByIdの結果を保持させておく。

ListViewまとめ

ということでListViewで画面表示する場合、大体以下が関連してくる

  • Activity(かFragment)
  • 呼び出し元
  • ListView
  • 表示するView(+子Viewが行になっていて、その子ViewもいくつかのViewでできている)
  • Adapter
  • ListViewに表示する際の処理を各クラス
  • ViewHolder
  • Adapterの処理のために1行分にあたる子Viewが持っている孫Viewの情報を保持する(実装必須ではない)
0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?