android原生可扩展ExpandableListView就是可以伸缩的listView,一条标题下面有多条内容。

 

 这个list的adapter对的数据要求与普通ListView的数据要求也有一些差别,这个list需要有两个数据源

一半需要 List<String> groups 作为group 和一个 Map<String , List<String>> children 作为children,他们最好意义对应

ExpandableListView使用起来和普通的listView方式差不多,不过ExpandableListView的适配器需要继承的父类是

BaseExpandableListAdapter,实现其中的各个方法。

下面说一说需要重写的方法的意

1.public Object getChild(int groupPosition, int childPosition) 返回当前group下的当前子内容对象。

 2. long getChildId(int groupPosition, int childPosition)  返回当前group下的当前子内容的id。

 3.public View getChildView(final int groupPosition,final int childPosition, boolean isLastChild, View convertView,

ViewGroup parent) 这个方法才是最重要的,类似于BaseAdapter的getView方法。在这里主要完成对内容条目的编码。

 4.public int getChildrenCount(int groupPosition) 返回当前group下面有多少条内容。

 5.public Object getGroup(int groupPosition) 返回当前group对象

 6.public int getGroupCount() 返回一共有多少个group

 7.public long getGroupId(int groupPosition) 返回当前group的ID

 8.public View getGroupView(int groupPosition, boolean isExpanded, View convertView, ViewGroup parent) 这个方法主要对group进行编码,需要什么样的group就在这里编码即可。 isExpanded 返回当前group是打开还是关闭的状态

 9.public boolean isChildSelectable(int groupPosition, int childPosition) 返回true 每一条的字内容可点击,否则相反。

 10.public boolean hasStableIds() 这个还不止有什么用途,一半返回true。

自定义group的指示器 

listView.setGroupIndicator(getResources().getDrawable(R.drawable.ic_launcher)); 

也可以让其隐藏在getGroupView中编码

源码下载Download

这个demo是继承自定义的ExpandSlideListView还用于下面一遍可以滑动内容的文章,两个文章用的是同一个源码。本人水平有限,见谅。