我创建一些ArrayList,让我们说5个元素。每个元素都是一个对象,例如Recipe
,它包含有关指定position
的每个显示行的一些信息。我尝试实现的是仅使用屏幕上元素的那个位置position
从ArrayList中删除指定notifyItemRemoved(position)
的元素。这是我的Java代码:Android Adapter "java.lang.IndexOutOfBoundsException: Invalid index 4, size is 4"
例如我已经显示:
[Row 0] Position 0
[Row 1] Position 1
[Row 2] Position 2
[Row 3] Position 3
[Row 4] Position 4
我的初始ArrayList
是这样的:[0, 1, 2, 3, 4]
当我删除这样的元素时:
POSITION = 4
list.remove(POSITION);
notifyItemRemoved(POSITION);
删除后
[Row 0] Position 0
[Row 1] Position 1
[Row 2] Position 2
[Row 3] Position 3
ArrayList
是这样的:[0, 1, 2, 3]
删除POSITION = 3
时我有:
[Row 0] Position 0
[Row 1] Position 1
[Row 2] Position 2
ArrayList
是这样的:[0, 1, 2]
所以一切都很好,因为已删除元素的POSITION
与ArrayList
中的位置相同。
但是当我在开头时删除了一些不同的元素f.e。POSITION = 2
时:
[Row 0] Position 0
[Row 1] Position 1
[Row 3] Position 3
[Row 4] Position 4
ArrayList
是这样的:[0, 1, 3, 4]
当我现在要删除f.e POSITION = 3
时,我会得到类似的结果:
[Row 0] Position 0
[Row 1] Position 1
[Row 3] Position 3
ArrayList
是这样的:[0, 1, 3]
- 它会删除我要删除的元素之后的元素。
另一件事是,当我尝试用列表删除最后一个元素 - POSITION 4
时(在开头我删除了POSITION = 2
处的元素):
[Row 0] Position 0
[Row 1] Position 1
[Row 3] Position 3
[Row 4] Position 4
我收到错误:java.lang.IndexOutOfBoundsException: Invalid index 4, size is 4
。
如何设法删除只有位置的元素?这可能是用ArrayList做的吗?
答案 0 :(得分:0)
也许你还没有理解Arraylist中索引的概念。 当你从Arraylist中删除一个项目时,会更新arraylist的索引。
查看下面的简单示例,您将对此有一个清晰的认识。
假设你的arraylist如下所示:
[第0行]第0位
[第1行]第1位
[第2行]第2位
[第3行]第3位
现在,如果从位置1中删除该项目,则会相应地重新索引arraylist。 所以,现在新列表中的位置变为:
[第0行]第0位
[第2行]第1位
[第3行]第2位
请注意,位置1中的项目,即:第1行已被删除,第1行下方的其余项目已移至上一个索引之上的位置1。
现在当你从循环中的arraylist中删除一个项目时,在删除一个项目之后你必须再次迭代它以便下次删除,或者你可以使用反向迭代。
如果您仍需要进一步澄清,请与我们联系。
感谢。