ExpandableListview
在垂直滚动展示两级列表的的视图。这与ListView不同,它有组对象和子对象,通过点击组对象来单制度展开子对象的内容,它的适配器跟普通的ListView不一样,需要继承BaseExpandableListAdapter ,都是用来给View提供数据,展示布局。
ExpandableListView是Android中可以实现下拉ListView的一个控件,是ListView的子类。
老规矩,先来看下效果图:
就是这么 一个效果,有兴趣的话就往下看把
1.先来看下布局,没有添加任何属性
<ExpandableListView
android:id="@+id/mElistview"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
2.随便模拟了几个数据
public String[] titleStrings = {"女朋友", "女神", "基友", "小弟"};
public String[][] nameStrings = {
{"苍井空", "波多野结衣", "小泽玛莉亚", "龙泽罗拉"},
{"鹿晗", "李易峰", "吴亦凡", "王俊凯"},
{"张先生", "刘先生", "李先生", "杜先生", "小弟弟"},
{"奥巴驴", "小学僧", "儿童劫", "托儿索"}
};
3.初始化数据源
/**
* 初始化数据源
*/
private void initList() {
List<TitleInfo> mList = new ArrayList<>();
for (int i = 0; i < titleStrings.length; i++) {
//创建组对象
TitleInfo info= new TitleInfo();
//循环添加组的标题名
info.setTitle(titleStrings[i]);
//创建子对象数据源
List<ContentInfo> list = new ArrayList<>();
for (int j = 0; j < nameStrings.length; j++) {
//创建子对象
ContentInfo info2 = new ContentInfo();
//添加用户名或者头像
info2.setName(nameStrings[i][j]);
//将子对象添加到数据源
list.add(info2);
}
//将子对象数据源复制给组对象
info.setInfo(list);
//将组对象添加到总数据源中
mList.add(info);
}
}
4.因为这是一个二级列表,所以它需要一个组对象的Bean和子对象的Bean,简洁说下参数
TitleInfo:
private String title;
private List<ContentInfo> info;
ContentInfo:
public String name; //名称
private String qianming;//签名
private String icon; //头像
5.写一个适配器 extens BaseExpandableListAdapter,他会返回很多方法,我已经在代码中都注释了
6.适配器里面有两个xml文件,我把它们分为组布局和子布局
7.MainActivity设置适配器就可以展示基本的效果了
8.我模拟了当点击一个组对象关闭其他组对象列表的功能,在工具类EListViewUtils.java文件中,通过调用适配器中的onGroupExpanded()方法来获取点击组对象的位置
9.对于处理item的点击事件,还要设置监听器,常用的有这么几个类
- setOnChildClickListener
- setOnGroupClickListener
- setOnGroupCollapseListener
- setOnGroupExpandListener
通过方法我们就会知道功能分别是击子选项、单击分组项、分组合并、分组展开的监听器。
代码就不贴了,太多,我已经给每一行添加过注释