スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Android ExpandableActivityでリストを拡張する

ExpandableActivityでリストを拡張する	
ExpandableActivityを利用することで、イメージのようにリストを拡張できるようになります
image002 (6)



■サンプル
レイアウトを利用してデータを出力する際は、どのデータをどのレイアウト(ウィジェット)で出力するのかをKeyで制御します
そのため、出力するデータはすべてMapなどを利用して、KeyValue形式で構築を行います。
1: package expand.sample.test;
2:
3: import java.util.ArrayList;
4: import java.util.HashMap;
5: import java.util.List;
6: import java.util.Map;
7: import android.app.Activity;
8: import android.app.ExpandableListActivity;
9: import android.os.Bundle;
10: import android.view.View;
11: import android.widget.ExpandableListView;
12: import android.widget.SimpleExpandableListAdapter;
13: import android.widget.Toast;
14:
15: public class ExpandableTest extends ExpandableListActivity {
16: public static final String USER = "user"; //最初のリストデータ表示用のKey
17: public static final String FAMILY = "family"; //詳細リストデータ表示用のKey1
18: public static final String FAMILY_DETAIL = "familydetail"; //詳
19:
20: @Override
21: public void onCreate(Bundle savedInstanceState) {
22: super.onCreate(savedInstanceState);
23: String[] users = { "山田", "田中", "佐藤" }; ① //家主一覧
24: String[] ymds = { "太郎", "次郎", "花子" }; //家族1名前情報
25: String[] ymdsDet = { "10歳", "8歳", "3歳" }; //家族1年齢情報
26: String[] tnks = { "一郎", "二郎", "三郎" }; //家族2名前情報
27: String[] tnksDet = { "26歳", "18歳", "15歳" }; //家族2年齢情報
28: String[] sts = { "愛子", "智子", "良子" }; //家族3名前情報
29: String[] stsDet = { "3歳", "2歳", "1歳" }; //家族3年齢情報
30:
31: /**
32: * ネストするリストの情報を生成
33: */
34: // 各家族情報を保持するリスト ②
35: List<List<Map<String, String>>> listData = new ArrayList<List<Map<String, String>>>();
36: // 各家族情報を生成
37: List<Map<String, String>> ymdList = new ArrayList<Map<String, String>>();
38: for (int i = 0; i < ymds.length; i++) {
39: Map<String, String> map = new HashMap<String, String>();
40: map.put(FAMILY, ymds[i]);
41: map.put(FAMILY_DETAIL, ymdsDet[i]);
42: ymdList.add(map);
43: }
44: List<Map<String, String>> tnkList = new ArrayList<Map<String, String>>();
45: for (int i = 0; i < tnks.length; i++) {
46: Map<String, String> map = new HashMap<String, String>();
47: map.put(FAMILY, tnks[i]);
48: map.put(FAMILY_DETAIL, tnksDet[i]);
49: tnkList.add(map);
50: }
51: List<Map<String, String>> stList = new ArrayList<Map<String, String>>();
52: for (int i = 0; i < sts.length; i++) {
53: Map<String, String> map = new HashMap<String, String>();
54: map.put(FAMILY, sts[i]);
55: map.put(FAMILY_DETAIL, stsDet[i]);
56: stList.add(map);
57: }
58: listData.add(ymdList);
59: listData.add(tnkList);
60: listData.add(stList);
61:
62: // 最初に表示されるデータ
63: List<Map<String, String>> group = new ArrayList<Map<String, String>>(); ③
64: for (String s : users) {
65: Map<String, String> mp = new HashMap<String, String>();
66: mp.put(USER, s);
67: group.add(mp);
68: }
69:
70: SimpleExpandableListAdapter adapter = new SimpleExpandableListAdapter( ④
71: this, // 自身のActivity
72: group, // 最初に表示されるListViewのデータ
73: android.R.layout.simple_expandable_list_item_1, // 最初に表示するレイアウト
74: new String[] { USER }, // groupに設定したKeyを設定
75: new int[] { android.R.id.text1 }, // list_item_1で設定するウィジェット
76: listData, // ListView選択時にさらに表示する一覧のデータ
77: android.R.layout.simple_expandable_list_item_2, // 1行分のレイアウト
78: new String[] { FAMILY, FAMILY_DETAIL }, // 表示するデータのKey(二つ)
79: new int[] { android.R.id.text1, android.R.id.text2 }); // 適応させるウィジェット(二つ)
80:
81: setListAdapter(adapter);
82: }
83:
84: /**
85: * 子リストクリック時に呼ばれるメソッド parentExpandableListViewが渡される
86: * v実際にクリックされたウィジェット(TwoLineListItem) groupPosition親リストのインデックス(0から)
87: * childPosition子リストのインデックス(0から) id子データの行番号
88: */
89:
90: @Override
91: public boolean onChildClick(ExpandableListView parent, View v,
92: int groupPosition, int childPosition, long id) {
93: boolean result = super.onChildClick(parent, v, groupPosition,
94: childPosition, id);
95: Toast.makeText(this,String.format("parent:%s,v:%s,groupposition:%d,childPosition:%d,id:%d",
96: parent.getClass(), v.getClass(),groupPosition, childPosition, id),Toast.LENGTH_LONG).show();
97: return result;
98: }
99: }
100:


①表示するリストデータを作成します。
今回は、Map化した家族情報(名前と年齢)を人数分List化して、そのList化した家族情報をさらに一つのListで管理する
②各家族情報をMapのList化とする。さらに一つのListへ各家族を追加する。
③最初のListViewへ表示されるデータを作成します。
④SimpleExpandableListAdapterを利用してアダプタを生成します。第一引数はActivityを指定します。
第二引数は最初に表示するListViewにバインドするデータを指定します。
第三引数は最初に表示するListViewの1行分のレイアウトを指定します
第四引数は上で設定したレイアウトに対して、バインドしたデータ(MapのList化)のどのKeyで取得するのかを指定します。
最初に表示するデータはKeyを「USER」でMap化したため、ここではUSERを指定します。
第五引数は第三で指定したレイアウトのどのウィジェットに出力するのかを指定します。
第六引数は最初のListViewクリック時に、さらに表示されるデータを指定します。
第七引数はその詳細なリストデータを表示する際のレイアウトを指定します。
第八引数は設定する情報を取得するKeyを設定します
第九引数はそれをどのウィジェットに紐付けるかを指定します
スポンサーサイト

コメントの投稿

非公開コメント

おすすめアプリ
カテゴリ
最新記事
リンク
アクセスカウンター
アクセス解析
imobile
i-mobile
i-mobile
i-mobile
i-mobile
i-mobile
検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QR
Amazon
Androidお勧め参考書
EC studio
商品
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。