从ExpandableListView中删除多个项目

时间:2016-10-21 19:39:25

标签: android list expandablelistview

我有一个ExpandableListView和一个复选框,可根据用户偏好删除项目。它在技术上"有效,但我遇到的问题是我必须单击复选框4或5次才能实际删除所有需要的条目。

我缺少什么想法?

chkOnline.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
    @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
         if(isChecked){
             for(int i = 0; i < devices.size(); i++){
                 if(!devices.get(i).isOnline()){
                     devices.remove(i);
                 }
             }
             adapter.notifyDataSetChanged();
          }
     }
});

1 个答案:

答案 0 :(得分:2)

这里的问题是您在删除项目时正在更改列表的大小:

假设您的列表大小为3:

//first iteration
i = 0, limit = 2 (i < size())
l = [1,2,3]
1 is online => l = [2,3]

//second iteration
i = 1, limit = 1 (because size() now returns 2 and i < size())
l = [2,3]

循环结束时不检查原始列表中的最后一个元素(3)。

要解决此问题,您可以简单地从头到尾迭代:

for(int i = devices.size() - 1; i >= 0; i--){
    if(!devices.get(i).isOnline()){
        devices.remove(i);
    }
}