动态删除cardviews但出错

时间:2018-09-30 20:21:51

标签: android android-recyclerview

到目前为止,当用户按下晶圆厂时,我已经有了此代码,将卡片视图添加到了recyclerview中。我现在也这样做了,因此当用户按下特定的卡片视图时,将显示一个对话框,当用户按下确定时,该卡片视图将被删除。但是我有问题

当recyclerview中还剩下2张Cardview时,我单击删除其中之一,就会出现此错误:

var inpt = document.getElementById("11w");
inpt.addEventListener("keyup", function(e){

e.preventDefault();
if (e.keyCode==49)
document.getELementById("11w").click();
}
});

第123行在此行
 10-01 09:20:45.473 28725-28725/com.app.supermarketaislefinder E/AndroidRuntime: FATAL EXCEPTION: main java.lang.IndexOutOfBoundsException: Invalid index 2, size is 2 at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251) at java.util.ArrayList.remove(ArrayList.java:399) at com.app.supermarketaislefinder.ProductAdapter$2$2.onClick(ProductAdapter.java:123) at android.support.v7.app.AlertController$ButtonHandler.handleMessage(AlertController.java:166) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:137) at android.app.ActivityThread.main(ActivityThread.java:4867) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:511) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1007) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:774) at dalvik.system.NativeStart.main(Native Method)

我该怎么办?

ProductAdapter.java

productList.remove(position);

1 个答案:

答案 0 :(得分:1)

在列表中添加或删除项目时,项目在列表中的位置可能会更改。因此,在点击时,您在onClickListener中分配的位置可能不是正确的位置。

尝试一下:

public void onClick(DialogInterface dialog, int id) {
    // ...

    productList.remove(holder.getAdapterPosition());
    notifyItemRemoved(holder.getAdapterPosition());

    // ...
}

这样,您将在单击时检查位置,而不是在绑定ViewHolder时检查位置。