Android中文API(95)——SimpleExpandableListAdapter
正文 一、结构 public abstract classSimpleExpandableListAdapter extendsBaseExpandableListAdapter java.lang.Object android.widget.BaseExpandableListAdapter android.widget.SimpleExpandableListAdapter 二、概述 一个使用Map存储组元素和子元素的静态数据,使用XML资源文件定义组元素和子元素View如何显示的简单适配器。你可以区分指定组元素返回的数据是List<Map>类型。在ArrayList中的每个实体对应ExpandalbeList中的一个组。实体中的Map列表包含了组下的每行数据。你也可以指定一个XML文件来定义用于在组元素的View的显示。此时Map中的键值将与指定的View(XML中定义的view id)对应起来。子元素的处理情况类似。注意当可折叠的深度若不只1层,返回的数据将被指定为List类型。首个List对应子元素中所代表的组,第二个List对应孙子元素在子元素组中的位置。Map亦将支持这样的特殊元素。(子元素嵌套组元素的情况) (译者注: ExpandableList 支持深度大于 1 的情况。在 andorid 自带的 ApiDomos 的例子中有这个的代码: App/View/ExpandableList3 )。 三、构造函数 publicSimpleExpandableListAdapter(Contextcontext,List<?extendsMap<String,?>> groupData, int groupLayout,String[]groupFrom, int[] groupTo,List<?extendsList<?extendsMap<String,?>>> childData, int childLayout,String[]childFrom, int[] childTo) 构造函数 参数 context 与SimpleExpandableListAdapter关联的ExpandableListView的上下文。 groupData一个Maps列表(List)。集合中的每个字典项与可折叠列表中的每个组元素一致。字典项提供了组元素包含的所有数据,并包含所有在"groupFrom"中指定的记录。 groupLayout 显示组元素的资源文件。该资源文件定义了如何显示组元素。该布局文件必须至少包括groupTo中所定义的View。(即groupTo中的View id数组必须都在该布局文件中找到) groupFrom一个键值列表。对应与组相关联的Map中的键值。 grouptTo组View应当显示groupFrom参数中的所有列数据。这些数据应当都用TextView来显示。列表中的前N个View从前N个groupFrom参数获得列元素的数据。 childData 一个Map列表的列表。外部列表中的每个实体对应一个组(按照组的位置编号)。在内部列表的每个实体对应某个组的子元素(按照子元素的位置编号)。该Map对应了子元素的数据。(按照childFrom数组中的值编号)。该Map包含了每个子元素的数据,并且应当包括所有在childFrom中指定的实体。 childLayout显示子元素的资源文件。该资源文件定义了如何显示子元素。布局文件至少应该包括所有在childTo中定义的View。(即childTo中的view id数组必须都在该布局文件中找到) childFrom 定义显示子元素的列名。该列名与childData中的子元素属性(字典键值)对应。 childTo子View应当显示childFrom参数中的所有列数据。这些数据应当都用TextView来显示。列表中的前N个View从前N个childFrom参数获得列元素的数据。 publicSimpleExpandableListAdapter(Contextcontext,List<?extendsMap<String,?>> groupData, int expandedGroupLayout, int collapsedGroupLayout,String[]groupFrom, int[] groupTo,List<?extendsList<?extendsMap<String,?>>> childData, int childLayout,String[]childFrom, int[] childTo) 构造函数。 参数 context 与SimpleExpandableListAdapter关联的ExpandableListView的上下文。 groupData一个Maps列表(List)。集合中的每个字典项与可折叠列表中的每个组元素一致。字典项提供了组元素包含的所有数据,并包含所有在"groupFrom"中指定的记录。 expandedGroupLayout定义组展开时的View的XML资源布局。该布局文件应当至少包括所有在groupTo中所定义的View。(即groupTo中的View id数组必须都在该布局文件中找到) collapasedGroupLayout定义组折叠时的View的XML资源布局。该布局文件应当至少包括所有在groupTo中所定义的View。(即groupTo中的View id数组必须都在该布局文件中找到) groupFrom一个键值列表。对应与组相关联的Map中的键值。 grouptTo组View应当显示groupFrom参数中的所有列数据。这些数据应当都用TextView来显示。列表中的前N个View从前N个groupFrom参数获得列元素的数据。 childData 一个Map列表的列表。外部列表中的每个实体对应一个组(按照组的位置编号)。在内部列表的每个实体对应某个组的子元素(按照子元素的位置编号)。该Map对应了子元素的数据。(按照childFrom数组中的值编号)。该Map包含了每个子元素的数据,并且应当包括所有在childFrom中指定的实体。 childLayout显示子元素的资源文件。该资源文件定义了如何显示子元素。布局文件至少应该包括所有在childTo中定义的View。(即childTo中的view id数组必须都在该布局文件中找到) childFrom 定义显示子元素的列名。该列名与childData中的子元素属性(字典键值)对应。 childTo子View应当显示childFrom参数中的所有列数据。这些数据应当都用TextView来显示。列表中的前N个View从前N个childFrom参数获得列元素的数据。 publicSimpleExpandableListAdapter(Contextcontext,List<?extendsMap<String,?>> groupData, int expandedGroupLayout, int collapsedGroupLayout,String[]groupFrom, int[] groupTo,List<?extendsList<?extendsMap<String,?>>> childData, int childLayout, int lastChildLayout,String[]childFrom, int[] childTo) 构造函数。 参数 context 与SimpleExpandableListAdapter关联的ExpandableListView的上下文。 groupData一个Maps列表(List)。集合中的每个字典项与可折叠列表中的每个组元素一致。字典项提供了组元素包含的所有数据,并包含所有在"groupFrom"中指定的记录。 expandedGroupLayout 定义组展开时的View的XML资源布局。该布局文件应当至少包括所有在groupTo中所定义的View。(即groupTo中的View id数组必须都在该布局文件中找到) collapasedGroupLayout 定义组折叠时的View的XML资源布局。该布局文件应当至少包括所有在groupTo中所定义的View。(即groupTo中的View id数组必须都在该布局文件中找到) groupFrom一个键值列表。对应与组相关联的Map中的键值。 grouptTo 组View应当显示groupFrom参数中的所有列数据。这些数据应当都用TextView来显示。列表中的前N个View从前N个groupFrom参数获得列元素的数据。 childData 一个Map列表的列表。外部列表中的每个实体对应一个组(按照组的位置编号)。在内部列表的每个实体对应某个组的子元素(按照子元素的位置编号)。该Map对应了子元素的数据。(按照childFrom数组中的值编号)。该Map包含了每个子元素的数据,并且应当包括所有在childFrom中指定的实体。 childLayout显示子元素的资源文件。该资源文件定义了如何显示子元素。布局文件至少应该包括所有在childTo中定义的View。(即childTo中的view id数组必须都在该布局文件中找到) lastChildLayout定义每组中最后一个子元素的View资源布局情况。该布局文件应当至少包括所有在childTo中所定义的View。(即childTo中的View id数组必须都在该布局文件中找到) childFrom 定义显示子元素的列名。该列名与childData中的子元素属性(字典键值)对应。 childTo子View应当显示childFrom参数中的所有列数据。这些数据应当都用TextView来显示。列表中的前N个View从前N个childFrom参数获得列元素的数据。 四、公共方法 publicObjectgetChild(int groupPosition, int childPosition) public longgetChildId(int groupPosition, int childPosition) (译者注:获取与在给定组给予孩子相关的数据。) publicViewgetChildView(int groupPosition, int childPosition, boolean isLastChild,ViewconvertView,ViewGroupparent) (译者注:获取子项) public intgetChildrenCount(int groupPosition) (译者注:返回在指定Group的Child数目。) publicObjectgetGroup(int groupPosition) public intgetGroupCount() (译者注:返回Group的总数目。) public longgetGroupId(int groupPosition) publicViewgetGroupView(int groupPosition, boolean isExpanded,ViewconvertView,ViewGroupparent) (译者注:获取父项) public booleanhasStableIds() public booleanisChildSelectable(int groupPosition, int childPosition) (译者注:是否让child获得焦点) publicViewnewChildView(boolean isLastChild,ViewGroupparent) 新建一个子元素View。 参数 isLastChild该child是否是组中的最后一个元素 parent 新的View的最终父亲。 返回 新的子元素View对象。 publicViewnewGroupView(boolean isExpanded,ViewGroupparent) 新建一个组元素View。 参数 isExpanded该组元素是否当前处于折叠状态 parent新View的最终父亲。 返回 新的组元素View对象。 五、补充 文章精选 ExpandableListActivity和SimpleExpandableListAdapter的使用方法 Expandable lists[blogspot] 示例代码: List < Map < String,String >> groupData = new ArrayList < Map < String,String >> (); List < List < Map < String,String >>> childData = new ArrayList < List < Map < String,String >>> (); for ( int i = 0 ;i < 20 ;i ++ ){ Map < String,String > curGroupMap = new HashMap < String,String > (); groupData.add(curGroupMap); curGroupMap.put(NAME, " Group " + i); curGroupMap.put(IS_EVEN,(i % 2 == 0 ) ? " Thisgroupiseven " : " Thisgroupisodd " ); List < Map < String,String >> children = new ArrayList < Map < String,String >> (); for ( int j = 0 ;j < 15 ;j ++ ){ Map < String,String > curChildMap = new HashMap < String,String > (); children.add(curChildMap); curChildMap.put(NAME, " Child " + j); curChildMap.put(IS_EVEN,(j % 2 == 0 ) ? " Thischildiseven " : " Thischildisodd " ); } childData.add(children); } // Setupouradapter 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} ); 本文转自over140 51CTO博客,原文链接:http://blog.51cto.com/over140/582403,如需转载请自行联系原作者