在我的主要活动中,我有ListView
。
我有两个List
,1是People
的列表,1是Group
的列表。
两个列表都来自各自的SQLite database
。
要显示这两个列表,我说的是ListView.setAdapter(PeopleAdapter)
和ListView.setAdapter(GroupAdapter)
,其中适配器只是扩展BaseAdapter
的ListView适配器并覆盖相关方法等。
我要做的是将Group
视图从普通列表视图更改为ExpandableListView
,这样当我点击Group
时,People
就会出现在ListView
实现这一目标的最佳方法是什么?
到目前为止,我已尝试将GroupsAdapter
更改为扩展BaseExpandableListAdapter
并使用该适配器,但我的活动中只有1 ListView
,因为ListView
无法设置ListView
适配器和ExpandableListView
。这花了我很长时间,但我最终还是恢复了我所有的改变,因为它只是没有按照我想要的方式工作。
有关如何完成我想要的设计的任何帮助将不胜感激,谢谢。
编辑:我正在寻找的那种东西粗略绘制的图片。按人员和组按钮不会启动新活动,它只是设置另一个适配器,一个具有列表视图,另一个具有可扩展列表视图。
答案 0 :(得分:1)
那里有几个ExpandableListView
个例子。即,你可以查看这个:
http://theopentutorials.com/tutorials/android/listview/android-expandable-list-view-example/
ExpandableListView的主要部分是它的适配器。在上面的示例中,它是ExpandableListAdapter
,它扩展了BaseExpandableListAdapter
。
在ExpandableListAdapter
中,您需要两个列表:
- 第一个称为group list
(父母),在您的情况下,它应该是组列表。即:
ArrayList<String> groups;
- 第二个称为child list
,您应该有第一个列表中每个元素的子列表(每个组的人员列表)。有几种方法可以做到这一点。即,您可以使用ArrayList
ArrayLists
ArrayList
,其中位置0中的ArrayList<ArrayList<String>> children;
public String getChild(int groupPosition, int childPosition) {
return children.get(groupPosition).get(childPosition);
}
是属于位置0中的组的人员列表,依此类推。
Map
您还可以ArrayList
将String
人映射到每个群组名称(Map<String, ArrayList<String>> children;
public String getChild(int groupPosition, int childPosition) {
return children.get(groups.get(groupPosition)).get(childPosition);
}
):
Map
在我上面提供的示例中,他们使用BaseExpandableListAdapter
。
构建列表的方式取决于您以及从数据库中检索数据的方式。
您必须从{{1}}实施所有必需的功能。请记住,群组是“父母”(在您的情况下,群组),孩子是每个群组的元素(在您的情况下,人群)。如果您理解这一点,我认为应该很容易遵循我上面提供的示例。