Java recyclerview中的list.remove()错误

Java recyclerview中的list.remove()错误,java,android,listview,arraylist,android-recyclerview,Java,Android,Listview,Arraylist,Android Recyclerview,我有一个列表,每一行都有一个复选框,我尝试获取所有复选框的位置,然后在上面循环,并用list.remove(indexofposition)删除每一行 但它抛出java.lang.IndexOutOfBoundsException 注:我的单名是“Dish” 代码: public void removeAtAll() { Iterator it = selectedCheckBox.entrySet().iterator(); if(!it.hasNext()){

我有一个列表,每一行都有一个复选框,我尝试获取所有复选框的位置,然后在上面循环,并用list.remove(indexofposition)删除每一行 但它抛出java.lang.IndexOutOfBoundsException

注:我的单名是“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)

您使用
dish.remove(getItem(key2))
从条目集中删除了一个条目,而您在迭代条目集时,我本来希望抛出
ConcurrentModificationException
,但显然您有一些
列表
,您没有向我们展示可能被
getItem
使用的条目,您也没有向我们展示,所以可能这就是
索引自动边界异常的原因

另外,为什么要在
DishToDel
上调用静态方法?这似乎是对实例方法的调用

通常,您应该能够在一个基于迭代器的循环中循环和删除,但是您有太多复杂的事情,无法确切地知道您要做什么

任何东西的单独创造

new makeDialog().makeDialog(mContext,mContext.getResources().getString(R.string.share_no_data));
正在尝试从方法
removeall
创建并将结果分配给某个对象,或将其传递到某个位置,这样它就不仅仅是一个无用的行。方法应该只有一个目的​, 不是多重的,尤其是没有矛盾的目的

一旦你清理了你的代码,你会发现诊断任何错误和寻求帮助变得容易得多。如果你确实寻求帮助,请给出一个完整的例子来说明你的问题。不要隐藏所有相关信息


不要使用原始类型

您使用
dish.remove(getItem(key2))
从条目集中删除了一个条目,而您在迭代条目集时,我本来希望抛出
ConcurrentModificationException
,但显然您有一些
列表
,您没有向我们显示可能被
getItem
使用,您也没有向我们展示,所以可能这就是
索引自动边界异常的原因

另外,为什么要在
DishToDel
上调用静态方法?这似乎是对实例方法的调用

通常,您应该能够在一个基于迭代器的循环中循环和删除,但是您有太多复杂的事情,无法确切地知道您要做什么

任何东西的单独创造

new makeDialog().makeDialog(mContext,mContext.getResources().getString(R.string.share_no_data));
正在尝试从方法
removeall
创建并将结果分配给某个对象,或将其传递到某个位置,这样它就不仅仅是一个无用的行。方法应该只有一个目的​, 不是多重的,尤其是没有矛盾的目的

一旦你清理了你的代码,你会发现诊断任何错误和寻求帮助变得容易得多。如果你确实寻求帮助,请给出一个完整的例子来说明你的问题。不要隐藏所有相关信息


不要使用原始类型

您可以添加错误日志吗?完成,请注意,我的菜式列表有三个选定框,然后在最后一个框中尝试从列表中删除,尝试获取位置=2,但列表现在只有一个元素位于位置0,那个么,如何一次性从我的列表中删除一些行呢?您的getItem最可能做的是什么?此方法无法在列表收缩时调整自身,但它是唯一的假设。不使用。未经加工的类型!您可以添加错误日志吗?完成,请注意,我的菜式列表有三个选定框,然后在最后一个框中尝试从列表中删除,尝试获取位置=2,但列表现在只有一个元素位于位置0,那个么,如何一次性从我的列表中删除一些行呢?您的getItem最可能做的是什么?此方法无法在列表收缩时调整自身,但它是唯一的假设。不使用。未经加工的类型!