美文网首页
ExpandableListView中childview的数据出

ExpandableListView中childview的数据出

作者: _蘇芳_ | 来源:发表于2016-08-10 14:30 被阅读258次
    • 问题:给child的集合个数是3个,但是打开折叠,出现了6个数据,debug发现getChildView执行了groupCount×childCount×2次,这显然是不合理的
    • 原因:
      虽然ExpandableListView提供了点击、展开、折叠的监听
    listview.setOnGroupClickListener()
    listview.setOnGroupExpandListener()
    listview.setOnGroupCollapseListener()
    

    但ExpandableListView自己就实现了点击group展开,再次点击折叠,不需要手动去写这个操作。
    除非需要同一时间只允许打开一个group,那么可以

    //展开监听,展开的时候遍历所有组,将其他的折叠起来
            listview.setOnGroupExpandListener(new ExpandableListView.OnGroupExpandListener() {
                @Override
                public void onGroupExpand(int groupPosition) {
                    for (int i = 0; i < ringAdapter.getGroupCount(); i++) {
                        if (groupPosition != i) {
                            listview.collapseGroup(i);
                        }
                    }
                }
            });
    

    前方高能
    如果手欠再次去实现了一遍展开和折叠的操作的话,比如这样,

    listview.setOnGroupClickListener(new ExpandableListView.OnGroupClickListener() {
                @Override
                public boolean onGroupClick(ExpandableListView parent, View v, int groupPosition, long id) {
                    //如果是展开的,就合上,如果合上的点击展开
                    if (listview.isGroupExpanded(groupPosition)) {
                        listview.collapseGroup(groupPosition);
                    } else {
                        listview.expandGroup(groupPosition);
                    }
                    return false;
                }
            });
    

    那么就会被认为展开了2次操作,会多调一遍getChildView(),造成数据重复!!

    相关文章

      网友评论

          本文标题:ExpandableListView中childview的数据出

          本文链接:https://www.haomeiwen.com/subject/ruhjsttx.html