2016-10-21 3 views
0

У меня есть ExpandableListView и флажок для удаления элементов в зависимости от предпочтений пользователей. Он «технически» работает, но проблема, с которой я столкнулась, - это снять флажок 4 или 5 раза, чтобы удалить все необходимые записи.Удалить несколько элементов из ExpandableListView

Любые идеи, что мне не хватает?

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

Проблема здесь состоит в том, что вы меняете размер списка, удаляя его элементы:

Предположим, что ваш список имел размер 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); 
    } 
} 
+0

Я люблю тебя Педро. +1 Даже не думал об этом – basic