Java ArrayList - 在Android异常中删除位置处的元素

时间:2015-12-25 13:50:10

标签: java android arraylist

我创建一些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]

所以一切都很好,因为已删除元素的POSITIONArrayList中的位置相同。

但是当我在开头时删除了一些不同的元素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做的吗?

1 个答案:

答案 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中删除一个项目时,在删除一个项目之后你必须再次迭代它以便下次删除,或者你可以使用反向迭代。

如果您仍需要进一步澄清,请与我们联系。

感谢。