【发布时间】:2018-02-27 20:32:54
【问题描述】:
我知道这是一个非常古老的问题,但即使参考了很多解决方案,也无法解决我的问题。实际上,我正在尝试删除 longclick 上的 recyclerview 项目,但出现以下错误。
顺便说一句,我在删除最后一项时没有收到任何错误,但是当我在删除除最后一项之外的任何其他项后尝试删除任何其他项时,我收到以下错误。
错误:
java.lang.ArrayIndexOutOfBoundsException: length=12; index=-1
at java.util.ArrayList.remove(ArrayList.java:401)
at community.infinity.message.MessageAdapter$1$1$1$1.run(MessageAdapter.java:219)
at android.os.Handler.handleCallback(Handler.java:725)
at android.os.Handler.dispatchMessage(Handler.java:92)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5041)
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:793)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
at dalvik.system.NativeStart.main(Native Method)
我的代码:
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
Message message = mMessages.get(position);
holder.setMessage(message.getMessage());
holder.msgContainer.setOnLongClickListener(view -> {
int position = holder.getAdapterPosition();
if (position != RecyclerView.NO_POSITION) {
mMessages.remove(position);
notifyItemRemoved(position);
notifyItemRangeChanged(position, mMessages.size());
}
return false;
});
}
}
}
【问题讨论】:
-
你好伙计,你提供的代码似乎仅限于我。但是查看错误日志,您似乎正在尝试访问超出数组范围的索引 -1。也许分享更多代码或再次校对您的代码?
-
我们需要在您删除项目本身之前保存和恢复所选项目索引的代码
-
@AntonMakov 你的意思是onBindViewHolder的完整代码吗?
-
-1 可能是
NO_POSITION值。 -
@user8027365 是的,还有删除项目的代码
标签: android arraylist android-recyclerview