- 问题:给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(),造成数据重复!!