2017-04-22 14 views
1

リストがあり、各行にチェックボックスがあります。すべてのチェックボックスの位置を取得してからループし、list.remove(indexOfpostion) で各行を削除しますが、javaをスローします。 lang.IndexOutOfBoundsExceptionrecyclerviewのlist.remove()エラー

注:私のリスト名は「Dish」です。

コード:

public void removeAtAll() { 


    Iterator it = selectedCheckBox.entrySet().iterator(); 
    if(!it.hasNext()){ 

     new makeDialog().makeDialog(mContext,mContext.getResources().getString(R.string.share_no_data)); 

    } 
    else { 
     while (it.hasNext()) { 
      Map.Entry pair = (Map.Entry) it.next(); 
      int key = (Integer) pair.getKey(); 
      if ((Boolean) pair.getValue()) { 
       // it.remove(); 
       DishToDel.add(dish.get(key).getDishID()); 

      } 
     } 
      // 
     for (Object o : selectedCheckBox.entrySet()) { 
      Map.Entry pair2 = (Map.Entry) o; 
      int key2 = (Integer) pair2.getKey(); 
      if ((Boolean) pair2.getValue()) { 

       dish.remove(getItem(key2)); // error here 
       notifyItemRemoved(key2); 
       notifyItemRangeChanged(key2, dish.size()); 
      } 
     } 
     chooseAllradioButton.setSelected(false); 
     favhtask = new FavAsyncTaskDelete(mContext, DishToDel); 
     favhtask.execute(); 
    } 
    // process message deleteing 

} 

エラーログ

FATAL EXCEPTION: main 
Process: com.TopLine.nokhbatalatbaq, PID: 32327 
java.lang.IndexOutOfBoundsException: Index: 2, Size: 1 
    at java.util.ArrayList.get(ArrayList.java:411) 
    at com.TopLine.nokhbatalatbaq.adapter.FavAdapterDishes.removeAtAll(FavAdapterDishes.java:344) 
    at com.TopLine.nokhbatalatbaq.adapter.FavAdapterDishes$4.onClick(FavAdapterDishes.java:151) 
    at android.view.View.performClick(View.java:6205) 
    at android.view.View$PerformClick.run(View.java:23653) 
    at android.os.Handler.handleCallback(Handler.java:751) 
    at android.os.Handler.dispatchMessage(Handler.java:95) 
    at android.os.Looper.loop(Looper.java:154) 
    at android.app.ActivityThread.main(ActivityThread.java:6682) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1520) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1410) 
+0

エラーログを追加できますか? – Carlton

+0

done、それは3つの選択されたボックスがあり、最後にリストから削除しようとすると、その位置のリストが2になりますが、リストには位置0の要素が1つしかないので、私のリストの行は一度だけですか? –

+0

あなたのgetItemが最も可能性が高いのは、このメソッドがリスト縮小ではなく、その唯一の前提です。 –

答えて

0

あなたは私がConcurrentModificationExceptionをスローするように期待したエントリのセットを、繰り返し処理しながら、dish.remove(getItem(key2))を使用して、エントリのセットから項目を削除しますが、おそらくによって使用されている可能性がありますが、これもあなたには表示されませんでしたので、が表示されていません。IndexOutOfBoundsExceptionです。

さらに、DishToDelで静的メソッドを呼び出すのはなぜですか?それは、インスタンスメソッドでなければならない呼び出しのように思えます。

通常、1つのイテレータベースのループでループと除去ができるはずですが、複雑な問題がありすぎて、何をしようとしているのか正確に知ることができません。どんな

new makeDialog().makeDialog(mContext,mContext.getResources().getString(R.string.share_no_data)); 

別々の作成は、それだけで役に立たないラインにならないように、方法removeAtAllから作成し、何かに結果を割り当てるか、どこかでそれを渡そうとしています。メソッドは、複数のものではなく、特に矛盾する目的ではなく、単一の目的を持つ必要があります。

コードを整理したら、バグを診断して助けを求める方がはるかに簡単です。助けを求めるなら、あなたの問題を示す完全な例を挙げてください。すべての関連情報を抑制しないでください。

また、RAWタイプを使用しないでください!

関連する問題