您好,我成功地通过一个示例并做了很多努力,在我的应用程序中创建了一个可扩展的列表视图,但是我不太了解如何成功获得用户单击的正确索引,我的意思是,我真的不知道其中包含什么childData以及groupData和childData如何相互关联。我需要一些帮助来理解这些家伙,我从未见过这种方式的泛型。所以这是我的问题:
1- childData和groupData如何相互关联,groupData是否进入childData Map?
2- String selectedWord = childData.get(groupPosition).get(childPosition).get(NAME);
得到正确的单词和标题(或组)在listView中?
这是代码:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.expandable_list_layout);
DBManager db = new DBManager(getApplicationContext());
List<String> header = db.selectAllCategories();
List<Map<String, String>> groupData = new ArrayList<Map<String, String>>();
final List<List<Map<String, String>>> childData = new ArrayList<List<Map<String, String>>>();
for (String category : header) {
Map<String, String> curGroupMap = new HashMap<String, String>();
groupData.add(curGroupMap);
curGroupMap.put(NAME, category);
List<String> categoryWords = db.selectWordsFromCategory(category);
List<Map<String, String>> children = new ArrayList<Map<String, String>>();
for (String word : categoryWords) {
Map<String, String> curChildMap = new HashMap<String, String>();
children.add(curChildMap);
curChildMap.put(NAME, word);
}
childData.add(children);
}
//create SimpleExpandableListAdapter object...
lv.setOnChildClickListener(new OnChildClickListener() {
public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) {
//How does the below code works?
//How can i get the group value from the childData map
//i thought childData had only childs in it?
String selectedWord = childData.get(groupPosition).get(childPosition).get(NAME);
Log.i("You clicked here:", selectedWord)
return false;
}
});
谢谢你的时间。
最佳答案
groupData
和childData
是两个不相关的数据结构。这是JSONey表示法中其内容的示例,以了解发生了什么:
groupData = [{"label": "Group 1" }, {"label" : "Group 2"}]
childData = [
[{"label" : "Child 1.1"}, {"label" : "Child 1.2"}],
[{"label" : "Child 2.1"}, {"label" : "Child 2.2"}, {"label" : "Child 2.3"}]
]
如果您的适配器以这种方式查看数据结构,则将获得具有两个组的可扩展列表视图,第一组为两个子组,第二组为三个子组。
childData
中的索引对应于组,其内部列表中的索引对应于组中的子级。内部列表的元素是具有适配器将绑定到列表项中的textview的值的映射。希望这可以帮助!