本例介绍了使用如何Map-based 数据作为Expandable List的数据源。
其中Group和Child的定义如下
List<Map<String, String>> groupData = new ArrayList<Map<String, String>>(); List<List<Map<String, String>>> childData = new ArrayList<List<Map<String, String>>>();
看起来有点复杂:-)。 Map<String,String> 类似于Hash表,这里可以看成是数据库表的一行,以列名作为关键字。比如本例一行数据为
本例为groupData 定义了20个只,从group 0 到group 19 ,对于每个group ,其下定义了15个子元素,从child 0 到 child 14
每个元素也有如下的值:
有了groupdata 和childdata ,就可以调用SimpleExpandableListAdapter构造函数:
// Set up our adapter mAdapter = new SimpleExpandableListAdapter( this, groupData, android.R.layout.simple_expandable_list_item_1, new String[] { NAME, IS_EVEN }, new int[] { android.R.id.text1, android.R.id.text2 }, childData, android.R.layout.simple_expandable_list_item_2, new String[] { NAME, IS_EVEN }, new int[] { android.R.id.text1, android.R.id.text2 } );
public SimpleExpandableListAdapter(Context context,
List<? extends Map<String, ?>> groupData,
int groupLayout, String[] groupFrom,
int[] groupTo,
List<? extends List<? extends Map<String, ?>>> childData,
int childLayout,
String[] childFrom, int[] childTo)
simple_expandable_list_item_1.xml 和simple_expandable_list_item_2.xml 可以参见http://www.netmite.com/android/mydroid/frameworks/base/core/res/res/layout/
simple_expandable_list_item_1 定义了一个文本框 id为text1 ,原例使用simple_expandable_list_item_1 显示group,对应的IS_EVEN 使用text2 为显示View的id在simple_expandable_list_item_1 不存在,因此只会显示Group xx。使用上述修改后,group 和 child 都使用simple_expandable_list_item_2 ,NAME 和 IS_EVEN 都会显示: