您好,我成功地通过一个示例并做了很多努力,在我的应用程序中创建了一个可扩展的列表视图,但是我不太了解如何成功获得用户单击的正确索引,我的意思是,我真的不知道其中包含什么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;
            }
        });


谢谢你的时间。

最佳答案

groupDatachildData是两个不相关的数据结构。这是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的值的映射。

希望这可以帮助!

09-11 18:07