最終更新:
moonlight_aska 2011年07月23日(土) 18:32:21履歴
折りたたみ可能なリストアクティビティ(ExpandableListActivity)は, ExpandableListViewを利用して, 図のように伸縮可能な一覧の表示や, 一覧から選択するイベントハンドラを提供する.

サブアイテムを選択すると, onChildClickイベントが発生する.
図は, SubItem 2-3を選択した場合


- アクティビティは, ExpandableListActivityクラスを継承する.
- 折りたたんだ状態のアイテムリストを作成する.
- 各アイテムのサブアイテムリストを作成する.
- アダプタ(ここではSimpleExpandableListAdapterクラス)を作成する.
- アダプタを設定する.
- サブアイテムが選択されたときの処理を行うため,onChildClickメソッドをオーバーライドする.
- ExpandableListView.getExpandableListAdapterメソッドで, アダプタを取得する.
- アダプタから選択されたサブアイテムのデータを取得する.
package com.moonlight_aska.android.expandablelist01;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import android.app.ExpandableListActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ExpandableListAdapter;
import android.widget.ExpandableListView;
import android.widget.SimpleExpandableListAdapter;
public class ExpandableList01 extends ExpandableListActivity{
private static final int ITEM_NUM = 3;
private static final int SUBITEM_NUM = 4;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// アイテムのリスト
List<Map<String, String>> itemList = new ArrayList<Map<String, String>>();
for(int i=0; i<ITEM_NUM; i++) {
Map<String, String> item = new HashMap<String, String>();
item.put("ITEM", "Item " + (i+1));
itemList.add(item);
}
// 各アイテムのサブアイテムのリスト
List<List<Map<String, String>>> allSubItemList = new ArrayList<List<Map<String, String>>>();
// サブアイテム, 詳細のリスト
for(int i=0; i<ITEM_NUM; i++) {
List<Map<String, String>> subItemList = new ArrayList<Map<String, String>>();
for(int j=0; j<SUBITEM_NUM; j++) {
Map<String, String> subItem = new HashMap<String, String>();
subItem.put("SUBITEM", "SubItem " + (i+1) + "-" + (j+1));
subItem.put("DETAIL", "Detail " + (i+1) + "-" + (j+1));
subItemList.add(subItem);
}
allSubItemList.add(subItemList);
}
// アダプタを作成
SimpleExpandableListAdapter adapter = new SimpleExpandableListAdapter(this,
itemList,
android.R.layout.simple_expandable_list_item_1,new String[] {ITEM"},
new int[]{android.R.id.text1},
allSubItemList,
android.R.layout.simple_expandable_list_item_2, new String[]{"SUBITEM", "DETAIL"},
new int[]{android.R.id.text1, android.R.id.text2}
);
// アダプタを設定
setListAdapter(adapter);
}
// サブアイテムが選択されたときの処理
@Override
public boolean onChildClick(ExpandableListView parent, View v,
int groupPosition, int childPosition, long id) {
// TODO Auto-generated method stub
// アダプタを取得
ExpandableListAdapter adapter = parent.getExpandableListAdapter();
// アダプタから選択されたサブアイテムのデータを取得
Map<String, String> subItem = (Map<String, String>)adapter.getChild(groupPosition, childPosition);
Log.v("ExpListView", subItem.get("SUBITEM") + " / " + subItem.get("DETAIL"));
return super.onChildClick(parent, v, groupPosition, childPosition, id);
}
}
サブアイテムを選択すると, onChildClickイベントが発生する.
図は, SubItem 2-3を選択した場合

コメントをかく