C/C++プログラマの管理者が, Androidプログラムにチャレンジ. AndroidプログラミングのTipsをメモっていく予定です.

折りたたみ可能なリストアクティビティ(ExpandableListActivity)は, ExpandableListViewを利用して, 図のように伸縮可能な一覧の表示や, 一覧から選択するイベントハンドラを提供する.



折りたたみ可能なリストアクティビティ

    • アクティビティは, 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を選択した場合





コメントをかく


ユーザーIDでかく場合はこちら
「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

Menu


逆引き(基礎編)

画面表示/操作(49)

フラグメント(1)

逆引き(応用編)

AD



管理人のみ編集できます