2017-04-22 34 views
1

我有列表,每一行都有複選框,我試着讓所有的複選框位置,然後循環它並刪除每一行list.remove(indexOfpostion) ,但它會拋出java。 lang.IndexOutOfBoundsExceptionlist.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

完成後,請注意,我的菜單列表當它有三個選定的框,然後在最後一個嘗試從列表中刪除它嘗試獲取位置= 2,但列表現在只有一個元素在位置0,所以如何刪除一些我的列表中的行只有一次? –

+0

你的getItem最有可能做什麼,這種方法無法在列表縮小時自行調整,但它是唯一的假設。 –

回答

0

您使用dish.remove(getItem(key2)),而你遍歷條目集,這是我沒有料想到會拋出ConcurrentModificationException刪除從入門集的項目,但顯然你有一些List,你沒有告訴我們,也許是使用getItem,你也沒有告訴我們,所以也許這就是爲什麼IndexOutOfBoundsException

另外,你爲什麼要調用一個靜態方法DishToDel?這看起來應該是一種實例方法的調用方式。

通常情況下,您應該能夠在單個基於迭代器的循環中進行循環移除,但您有太多複雜的事情,無法確切知道您要做什麼。

獨立創作的任何

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

試圖從方法removeAtAll創建和結果分配給的東西,或者某個地方傳遞,所以它不只是一個無用線。方法應該有一個單一的目的,而不是多個目標,特別是沒有矛盾的目的。

一旦你清理了你的代碼,你會發現診斷任何錯誤併爲它們尋求幫助要容易得多。如果您確實尋求幫助,請舉一個完整的示例來說明您的問題。不要壓制所有相關信息。

不要使用原始類型!