2016-10-21 4 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

ここでの問題は、その項目を除去しながら、あなたがリストのサイズを変更しているということです。

//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の大きさを持っていたと仮定元のリストの最後の要素(3)をチェックします。この問題を解決するには

あなたは単に開始から端まで反復することができます。

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

私はあなたをペドロが大好きです。 +1それも考えていない – basic

関連する問題