我的布局中有一个 simple_list_item_multiple_choice 列表视图,我正在尝试从中删除所有选定的项目。我知道如何删除它但删除项目时遇到两个主要问题: -
我的程序没有删除超过2个项目,如果我选择了4个项目,那么只有2个项目会被删除,有时甚至会删除错误的项目。
当我调试我的代码时,我在我的代码中找到了Array IndexOutOfBoundException ,据我所知,在我的代码中没有这样的例外,因为删除了错误或更少项目
这是我的代码: -
public void onClick(View view)
{
SparseBooleanArray checkedPositions = new SparseBooleanArray();
checkedPositions.clear();
checkedPositions = lv.getCheckedItemPositions();
int size = checkedPositions.size();
if(size != 0)
{
try
{
for(int i = 0; i < size; i++)
{
if(checkedPositions.valueAt(i))
{
list.remove(checkedPositions.keyAt(i));
notes.notifyDataSetChanged();
lv.setItemChecked(i,false);
}
}}catch (IndexOutOfBoundsException ie)
{}
}
else{}
}
我只是出于调试目的而捕获了异常。在此先感谢,但请帮忙,因为自从过去两天以来我一直困在这一部分。
答案 0 :(得分:3)
每次从下方拉杆中的阵列中移除一个项目时,总计数减少1.如果有4个项目要删除[0,1,2,3],则删除以项目开头的项目0,你有[0,1,2],然后你在1处删除项目,你有[0,1],如果你试图删除索引2处不存在的项目,你将收到错误。尝试倒数而不是像这样
for(int i = size; i > 0; --i)
{
if(checkedPositions.valueAt(i))
{
list.remove(checkedPositions.keyAt(i));
notes.notifyDataSetChanged();
lv.setItemChecked(i,false);
}
}
答案 1 :(得分:1)
从它的外观来看,你应该改变这个
for(int i = 0; i <= size; i++)
到
for(int i = 0; i < size; i++)
答案 2 :(得分:1)
for(int i = size-1 ; i >= 0; i--)
{
if(checkedPositions.valueAt(i))
{
list.remove(checkedPositions.keyAt(i));
//lv.setItemChecked(checkedPositions.keyAt(i),false);
}
}
notes.notifyDataSetChanged();