折りたたみ式リストビューを作る(ExpandableListView)/Getting Started
Androidでは、複数の選択肢の中からデータを選択するために便利なウィジェットが多数存在します。
以前、TechBoosterでは、ListViewについて紹介しました。
リストビュー(ListView)を使う/Getting started
ListViewは、データの一覧をズラッと表示するのに便利ですが、情報が多くなると、欲しい情報がどこにあるかわかりにくくなってしまいがちです。
そこで今回は右の図のような、データをカテゴリ等に分類し、展開したり折りたたんだりできるExpandableListViewについて解説します。
ExpandableListViewを使う際に便利なメソッド
ExpandableListViewでは、イカのメソッドを使うと便利です。
[table “169” not found /]
それでは続きをどうぞ。
リストの項目がクリックされた時の処理
リストの項目がクリックされた時の処理を作るには、ExpandableListViewインスタンスに登録するOnChildClickListenerインターフェースのonChildClickメソッドを使います。
具体的には、イカのようにします。
■src/ExpandableListViewActivity.java
ExpandableListView lv = (ExpandableListView) findViewById(R.id.expandableListView1); lv.setOnChildClickListener(new OnChildClickListener() { @Override public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { /*****ここにクリックされた時の処理を書く*****/ return false; } });
2行目でExpandableListViewにOnChildClickListenerをセットし、3,4行目でonChildClickをオーバーライドしています。
リストの項目がクリックされた時の処理は、onChildClickメソッドの中に記述します。
onChildClickメソッドの引数は、それぞれイカのようになっています。
[table “168” not found /]
第1引数のparentから、クリックされた場所の情報を取得することができます。
具体的にはイカのようにします。
■src/ExpandableListViewActivity.java
public boolean onChildClick(ExpandableListView parent, View view, int groupPosition, int childPosition, long id) { //クリックされた場所が持っている情報を取得 ExpandableListAdapter adapter = parent.getExpandableListAdapter(); // クリックされた場所の情報の詳細を取得 Map<String, String> item = (Map<String, String>) adapter.getChild(groupPosition, childPosition); } });
4行目で、クリックされた場所が持っている情報(Adapter)を取得しています。
7行目で、ExpandableListAdapterクラスのgetChildメソッドを用いて、Adapterの持っている詳細内容を取得しています。
Mapとは
Mapとは、 キーと要素のペアで構成されるデータ構造を保持するインターフェースです。
例えば、「Android1.6」というキーに対する要素が「Donuts」といったように、キーと要素がペアになっているデータ構造です。
Map
グループの親項目がクリックされた時の処理
ExpandableListViewは上述の通り、展開したり折りたたんだりできるリストです。
展開したり折りたたんだりするには、グループの親項目を選択することで行えます。
グループの親項目が選択された時に同時に何かの処理をさせることも可能で、ExpandableListViewインスタンスに登録するOnGroupClickListenerインターフェースのonGroupClickメソッドを使います。
具体的には、イカのようにします。
■src/ExpandableListViewActivity.java
ExpandableListView lv = (ExpandableListView) findViewById(R.id.expandableListView1); lv.setOnGroupClickListener(new OnGroupClickListener() { @Override public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) { /*****ここにグループの親項目が選択された時の処理を書く*****/ return false; } });
リスト項目が選択された時のonChildClickメソッドと同様に、2行目でExpandableListViewにOnGroupClickListenerをセットし、3,4行目でonGroupClickをオーバーライドしています。
onGroupClickメソッドの引数も、childPositionが無いだけで、onChildClickメソッドとほぼ同じです。
[table “170” not found /]
それではこれらのメソッドを用いて、サンプルプログラムを作ってみましょう。
サンプルプログラム
ExpandableListViewを作成するには様々な方法がありますが、今回は最も基本的な