0

我的布局中有一个simple_list_item_multiple_choice列表视图,我正在尝试从中删除所有选定的项目。我知道如何删除它,但是在删除项目时我遇到了两个主要问题:-

  1. 我的程序不会删除超过 2 个项目,例如如果我选择了 4 个项目,那么只会删除 2 个项目,有时甚至会删除错误的项目。

  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{}
}

我仅出于调试目的才捕获异常。在此先感谢,但请提供帮助,因为自从过去两天以来,我一直被困在这一部分。

4

3 回答 3

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);
  }
}
于 2011-04-01T07:33:46.227 回答
1

从它的外观,你应该改变这个

for(int i = 0; i <= size; i++)

for(int i = 0; i < size; i++)
于 2011-04-01T07:18:34.203 回答
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();
于 2011-04-01T08:55:35.180 回答