最近两天学习实现了一个功能,感觉很好,一定要记录下来。
在网上找了一些资料,林林总总,总是不那么齐全,有的代码做成小Demo还会报错,需要自己调试半天。也幸好如此,我将此功能涉及到的一些知识点理解的更加深刻一些。
功能需求:设计一个列表,类似qq好友列表,点击一级标题(对应:组名称),展开二级内容(对应:好友列表),再点击,则收起二级内容。一级标题下有一按钮,随着列表的展开收起自动的跟在一级列表下。
该功能使用了Android中的一个控件:ExpandableListView。
ExpandableListView是ListView的子类,它在普通的ListView的基础上进行了拓展,它把应用中的列表分为几组,每组又包含多个列表项。它的用法和ListView很像,只是其所显示的列表项应该由ExpandableListAdapter提供。下面提供该控件一些属性说明:
android:groupIndicator ———————————— 显示在组列表旁边的Drawable对象:可以是一个图片。
android:childIndicator ———————————— 显示在子列表旁边的Drawable对象
android:childDivider ———————————— 指定各组内子类表项之间的分割条:图片不会完全显示,分离子列表项的是一条直线。
android:childIndicatorRight —————————— 子列表项指示符的右边约束位置:表示左端从什么位置开始。
android:indicatorLeft ———————————— 组列表项指示器的左边约束位置
注意:在XML文件中,如果ExpandableListView上一级视图的大小没有严格定义的话,则不能对ExpandableListView的android:layout_height属性使用wrap_content值。(例如,如果上一级视图是ScrollView的话,则不应该指定wrap_content的值,因为它可以是任意的长度。不过,如果ExpandableListView的上一级视图有特定的大小的话,比如100像素,则可以使用wrap_content)。
适用于ExpandableListView的Adapter要继承BaseExpandableListAdapter,且必须重载getGroupView和getChildView两个最重要的方法。使用BaseExpandableListAdapter时,需要重载一下方法。
/**
* 取得分组数
*
* @return 组数
*/
@Override
public int getGroupCount() {
// TODO Auto-generated method stub
return 0;
}
/**
* 取得指定分组的子元素数
*
* @param groupPosition
* :要取得子元素个数的分组位置
* @return:指定分组的子元素个数
*/
@Override
public int getChildrenCount(int groupPosition) {
// TODO Auto-generated method stub
return 0;
}
/**
* 取得与给定分组关联的数据
*
* @param groupPosition
* 分组的位置
* @return 指定分组的数据
*/
@Override
public Object getGroup(int groupPosition) {
// TODO Auto-generated method stub
return null;
}
/**
* 取得与指定分组、指定子项目关联的数据
*
* @param groupPosition
* :包含子视图的分组的位置