ListViewのレイアウトを変えたり、1アイテムに複数の項目を表示したい場合などは、ArrayAdapterを継承し、getViewをカスタマイズする・・・。
ArrayAdapter | Android Developers
まず、名前name, 年齢age, 住所addressからなるListItemクラスを定義・・・。
[New]-[Class]で、
ListItemクラスを作成・・・。
そして、list_item.xmlは、
このようにLinearLayoutと3つのTextViewでそれぞれのメンバを表示する・・・。
ListItemの配列を受け取るArrayAdapter
[New]-[Class]から、
[Superclass]の[Browse...]を押して、
ArrayAdapterを選択・・・。
これでFinishし、
"<T>"のところは"<ListItem>"とする・・・。
ListItemAdapterを書いていく・・・。
コンストラクタでLayoutInflaterを取得する・・・。
LayoutInflaterは、xmlリソースを動的に差し替える仕組みで、
Androyer in Japan: LayoutInflaterについて勉強する
【Android】LayoutInflaterを使ってみる | ザワプロ!
こちらを参照のこと・・・。
まあ、難しいので最初はこういうものだとおもっていい・・・。
こちらがキモのgetView・・・。
positionに表示するアイテムのインデックス、convertViewにアイテムテンプレートが入る・・・。
parentは今回は使わない・・・。
ConvertViewの再利用の解釈 - satohu20xx's diary
convertViewがnullの場合は、新しいアイテムを表示するということでinflater.inflateでビューを作成し、
そうでないときは、既存のビューを再利用する仕組みになっている模様・・・。
convertView.findViewByIdで各要素のTextView(名前ならtvname)を取得、getItem(position)で表示するListItemが取れるので、tvname.setText(getItem(position).name)という感じで、名前のTextViewの表示を差し替えられる・・・。
tvage, tvaddressも同様に行う・・・。
最後にconvertViewを戻り値に指定・・・。
さて、MainActivity.javaは、
要素数3のListItem配列を用意・・・。
ListItemAdapterのadapterをこれまでのようにlistview1.setAdapterでセット・・・。
これで複数項目表示できるようになった・・・。
Sample/MainActivity.java at master · bg1bgst333/Sample · GitHub
Sample/ListItem.java at master · bg1bgst333/Sample · GitHub
Sample/ListItemAdapter.java at master · bg1bgst333/Sample · GitHub
Sample/activity_main.xml at master · bg1bgst333/Sample · GitHub
Sample/list_item.xml at master · bg1bgst333/Sample · GitHub
Sample/strings.xml at master · bg1bgst333/Sample · GitHub
Sample/AndroidManifest.xml at master · bg1bgst333/Sample · GitHub