2015-12-25 39 views
-3

我创建了一些ArrayList,让我们说5个元素。每个元素都是一些对象,比如Recipe,其中包含有关指定的position中每个显示行的一些信息。我试图完成的是从ArrayList中删除指定的position元素,只使用屏幕上元素的那个位置,然后notifyItemRemoved(position)。这是我的Java代码:Android Adapter "java.lang.IndexOutOfBoundsException: Invalid index 4, size is 4"Java ArrayList - 在Android中的Position中删除元素异常

,比如我有显示:

[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

也许你还没有理解Arraylist中索引的概念。 当你从Arraylist中删除一个项目时,ArrayList的索引被更新。

查看下面的简单示例,您将会对此有清晰的认识。

假设你的ArrayList是,如下所示:

[行0]位置0

[行1]位置1

[行2]位置2

[行3]位置3

现在,如果您从位置1删除该项目,那么阵列列表将相应地重新编制索引。 所以,现在在新的列表中的位置就变成了:

【行0]位置0

[行2]位置1

【行3位2

注意的项目从位置1开始,即:第1行已被删除,而第1行以下的其余项目已被移至位置1,高于先前的索引。

现在,当你在一个循环一个ArrayList删除的项目,然后删除一个项目后,你必须再次重复它接下来的删除,也可以使用反向迭代为。

让我知道,如果你还需要更多这方面的澄清。

谢谢。