Android > リストビュー(List View)


2つの文字列(AAA#,BBB#)のセットが複数あるときに、これをリストで表示する
AAA1 BBB1
AAA2 BBB2
AAA3 BBB3

リストで表示する

リストビューをつかう
<ListView />

デフォルトで設定したアイテムを使う

レイアウトxml
<ListView
   android:entry="@array/lvArray">

strings.xml
<string-array name="lvArray">
  <item>AAA1</item>
  <item>AAA2</item>
  <item>AAA3</item>
</string-array>

動的にアイテムをセットする

アダプタクラスを使う。
Adapter | Android Developers

2つの情報を扱う前提なので、SimpleAdapterを使う。
SimpleAdapter | Android Developers

マップMapのリストでアイテムの情報を作る。
List<Map<String, String>> listMap = new ArrayList<Map<String, String>>();
Map<String, String> map = new Map<String, String>();
map.put("AAA","AAA1");
map.put("BBB","BBB1");
listMap.add(map);

データ元と表示先を結びつける情報(配列)を準備する
String[] from = {"AAA","BBB"}
int[] to = {android.R.id.text1, android.R.id.text2};
Androidで提供されているリストビュー(android.R.layout.simple_list_item_2)を使う場合。AAA->text1, BBB->text2 を結びつける。

SimpleAdapterを生成する
SimpleAdapter adapter = new SimpleAdapter(ThisActivity.this, listMap, android.R.layout.simple_list_item_2, from, to);

setAdapterでリストビューに表示させる
ListView lvList = (ListView)FindViewById(R.id.dataView);
lvList.setAdapter(adapter);

リストビューで独自レイアウトを設定する


行の内容のxmlレイアウトファイルを作成する

1行分のレイアウトを記述。この「1行分」をたくさん作って、ListViewにぶら下げていく。

BaseAdapterを継承したクラスを作成する

BaseAdapter | Android Developers
4つのメソッドを実装する必要がある。
  • getCount
    • アイテム数を返す。SimpleAdapterでは、コンストラクタの二つ目の引数で読ませる、ArrayListアイテムの個数(size)を返すことになる。これに対応する関数を作成する。
    • getCount - Adapter | Android Developers
  • getItem
  • getItemId
    • アイテムの位置から、そのアイテムに対応するIDを返す。SimpleCursorAdapterでは、DB情報からIDを返すようだが、通常のリストではpositionと同じ値を返すように実装されている。ので、ここでもpositionをそのまま返す。
    • getItemByID - Adapter | Android Developers
  • getView
    • 次項

getViewの実装

イメージとしては、リストのある一行を(作成と?)表示する機能を実装する。Viewの作成には、手作業で作成する方法と、LayoutInflaterをつかって、レイアウトXMLファイルから作成する方法があるが、XMLファイルから作ったほうが簡単。
View v;
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = inflater.inflate(R.layout.row, null); // rox.xml を作っていると仮定

この View(レイアウトXML)の子ビューを、findViewByIdで取得し、ここにsetText(など)で値を設定する。SimpleAdapterでは、これをすでに実装してくれている。

ListView.setAdapterを実行する

結びつけるListViewにsetAdapterを実行することで、ListViewにぶら下げられる。


最終更新:2017年04月28日 20:59