情景:-
我有两个ArrayList
列表包含图像
postList包含所选图像的位置
现在,当我选择图像并按删除菜单时,应删除所选图像。
当我在debug
中运行代码时,它工作正常,并给予了所需的输出。
但是当我在正常模式下运行它时,它会崩溃并给出高于exception
的结果。
if (posList.size() > 0)
{
Toast.makeText(getBaseContext(), "i value" +posList.size(),
Toast.LENGTH_SHORT).show();
for (int i = 0; i < posList.size(); i++)
appAdp.list.remove(appAdp.list.get(posList.get(i)));
appAdp.notifyDataSetChanged();
posList.clear();
Toast.makeText(getBaseContext(), "You deleted selected items",
Toast.LENGTH_SHORT).show();
}
return true;
此处显示postList值
@Override
public void onItemCheckedStateChanged(ActionMode mode, int position, long id,
boolean checked) {
posList.add(position);
此处显示错误
appAdp.list.remove(appAdp.list.get(posList.get(i)));
对数分类器:-
java.lang.IndexOutOfBoundsException: Invalid index 2, size is 2
at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251)
at java.util.ArrayList.get(ArrayList.java:304)
为什么它会这样,没有任何线索。
谢谢你的帮助。
7条答案
按热度按时间zujrkrfu1#
您正在尝试对同一个数组列表执行操作,因为当您从数组列表中删除元素时,它的大小将减小,因此,您将得到
ArrayIndexoutofBoundsException
。即,当您从appAdp.list
中删除项时,appAdp.list
的大小也将更改考虑一下你的列表最初是否有3个元素。
你的位置在你的位置列表0,2
然后,当您从
0
中删除项从appAdp.list
中删除项时,其大小将变为2
,下次当您尝试删除位置2
处的项时,将得到AIOBE
将需要删除的所有项目保存在单独的列表中,然后使用
removeAll(list)
方法从appAdp.list
中删除项目示例:
然后
u0sqgete2#
试试这个代码,
第一个月
然后,
notifyItemRangeChanged(positon,postList.size());
col17t5w3#
在更改适配器的数据源之前,可以调用适配器的
notifyDataSetInvalidated()
函数使源数据源无效,更改完数据源后再调用适配器的notifyDataSetChanged()
函数。sf6xfgos4#
记住索引是从零开始的。2我认为当你得到位置时,它比数组的索引高+1,所以你会得到越界异常
qkf9rpyu5#
错误为
Invalid index 2, size is 2
可能的问题是
posList.size()=2
,而appAdp.list.size()<2
确保
appAdp.list
有两个以上的条目。2sbarzqh6#
异常的基本含义java.lang.IndexOutOfBoundsException:无效的索引x,大小为y,其中x和y分别是索引位置和大小,表示您试图在不存在的位置获取值。以大小为2的ArrayList为例,通常你会希望得到价值(s)通过指定位置索引**(在这种情况下,有效位置将是0或1**),并最终指定位置2(索引2不存在)。我相信理解Java错误的基本含义将为您的开发节省大量宝贵的时间。
wgmfuz8q7#
只需在for循环末尾使用break命令,如下所示: