小伙伴们,在上文中我们介绍了Android视图组件ListView,本文我们继续盘点,介绍一下视图控件的ExpandableListView。
ExpandableListView是Android中的一个可扩展列表视图,它继承自ListView,并提供了支持展开和折叠的功能。ExpandableListView可以展示带有分组和子项的层次结构数据,让用户可以方便地通过展开和折叠操作来浏览和查看更多的内容。
以下是对ExpandableListView的一些基本特性和用法:
在 XML 布局文件中添加 ExpandableListView:
<ExpandableListView
android:id="@+id/expandableListView"
android:layout_width="match_parent"
android:layout_height="match_parent"
/>
准备数据源:为 ExpandableListView 提供分组项和子项的数据。通常情况下,你可以使用一个适配器(Adapter)来管理数据。
List<String> groupList = new ArrayList<>(); // 分组项数据列表
Map<String, List<String>> childMap = new HashMap<>(); // 子项数据映射
// 添加分组项数据
groupList.add("Group 1");
groupList.add("Group 2");
groupList.add("Group 3");
// 添加子项数据
List<String> childList1 = new ArrayList<>();
childList1.add("Child 1-1");
childList1.add("Child 1-2");
childMap.put(groupList.get(0), childList1);
List<String> childList2 = new ArrayList<>();
childList2.add("Child 2-1");
childList2.add("Child 2-2");
childList2.add("Child 2-3");
childMap.put(groupList.get(1), childList2);
// 继续添加其他分组项和子项数据...
创建适配器(Adapter):创建一个适配器类,并继承自 BaseExpandableListAdapter,实现必要的方法以提供数据和视图绑定。
public class MyExpandableListAdapter extends BaseExpandableListAdapter {
private List<String> groupList;
private Map<String, List<String>> childMap;
public MyExpandableListAdapter(List<String> groupList, Map<String, List<String>> childMap) {
this.groupList = groupList;
this.childMap = childMap;
}
// 实现必要的方法...
@Override
public int getGroupCount() {
return groupList.size();
}
@Override
public int getChildrenCount(int groupPosition) {
String groupName = groupList.get(groupPosition);
List<String> childList = childMap.get(groupName);
return childList != null ? childList.size() : 0;
}
@Override
public Object getGroup(int groupPosition) {
return groupList.get(groupPosition);
}
@Override
public Object getChild(int groupPosition, int childPosition) {
String groupName = groupList.get(groupPosition);
List<String> childList = childMap.get(groupName);
return childList != null ? childList.get(childPosition) : null;
}
// 其他方法...
}
在代码中设置适配器和监听器:
// 获取 ExpandableListView
ExpandableListView expandableListView = findViewById(R.id.expandableListView);
// 创建适配器
MyExpandableListAdapter adapter = new MyExpandableListAdapter(groupList, childMap);
// 设置适配器
expandableListView.setAdapter(adapter);
// 设置分组项点击事件监听器
expandableListView.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {
@Override
public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) {
// 处理分组项点击事件
return false; // 返回 true 可拦截事件,不会展开或折叠分组项
}
});
// 设置子项点击事件监听器
expandableListView.setOnChildClickListener(new ExpandableListView.OnChildClickListener() {
@Override
public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
// 处理子项点击事件
return true; // 返回 true 可拦截事件,不会触发默认的选择效果
}
});
常用方法:
常用属性:
ExpandableListView提供了一种方便的方式来展示具有层次结构的列表数据,并允许用户通过展开和折叠操作来浏览更多内容。它通常用于菜单、分类列表、可折叠的评论或帖子等场景。