当我们在使用ExpandableListActivity来实现分级列表的时候,很多人搞不懂SimpleExpandableListAdapter里的9个参数的意义,以及如何来控制一级条目下的二级条目信息。下面我来讲解一下我在学习完ExpandableListActivity的经验,首先来看一下官方文档中的SimpleExpandableListAdapter的构造介绍:
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)
参数讲解:
1.Context context:context就是我们加入该ExpandableListActivity的上下文,一般设置为this,或者xxx.this。
2.List<? extends Map<String, ?>> groupData:groupData就是一级条目,其中我们经常将其设置为ArrayList<HashMap<String,String>>,每一个一级条目的名称都是与一个HashMap<String,String>对应。
3.int groupLayout:这个参数是用来表示一级条目样式的,一般都是我们自己定义,可以是简单点的TextView,也可以根据程序需要自定义更加绚丽的样式,和ListActivity中为每一个Item定义样式一样,一通百通。
4.String[] groupFrom:因为我们在上面的groupData中使用Map<String,?>来定义一级条目,所以这里要通过Map中的key值来锁定显示的信息,这个groupFrom就是上面HashMap中的key值。
5.int[] groupTo:我们在这里可以横向比对下ArrayAdapter中的参数,其实这几个适配器的参数都大同小异的。这个groupTo就是在布局里显示一级条目信息的widget的id,例如你的样式如果定义为用一个TextView来显示一级条目名称,那这个groupTo就是这个TextView的id值
6.List<? extends List<? extends Map<String, ?>>> childData:这个参数最重要,这里的childData和上面的groupData意义相同,是二级条目的信息列表。这里就有很多朋友会问,在添加二级信息到一级列表信息时如何保证一二级信息的正确对应呢,这里有个窍门,我们一般在最后添加二级列表到一级列表时会先定义一个List<List<HashMap<String,String>>> list,这时需要在添加二级列表时保证添加的顺序和一级条目的顺序相互配合好,比如说我们定义了
List<HashMap<String,String>> list1
List<HashMap<String,String>> list2
List<HashMap<String,String>> list3这三个二级条目的信息列表
那么我们在向list中添加这三个List时就要与在定义一级条目时的顺序保持一致,
如果这时你按照list.add(list1);list.add(list2);list.add(list3);来添加,则显示时也是按照第一个一级条目对应list1,第二个一级条目对应list2显示;
而如果你按照list.add(list2);list.add(list3);list.add(list1); 来添加,则显示时就会按照第一个一级条目对应list2,第二个一级条目对应list3显示..这里大家一定要注意
这样就能正确对应住一二级列表了,因为在适配器定义时并没有明文定义对应信息。
7.int childLayout:这个参数是二级条目的显示样式,和上述的groupLayout作用相仿。
8.String[] childFrom:同样,二级条目也需要通过HashMap<String,?>的键值对来进行展示,这个参数就是为了正确找到二级列表信息的HashMap的Key值。
9.int[] childTo:这个childTo就是在布局里显示二级条目里的widget的id。
如果有不妥的地方还请大家拍砖,这时我博客的第一篇,也是我人生中的第一篇博客,以后会再接再厉。
2011-6-10-01:19 哈根达斯