从Android中的ListView中删除项目时遇到IndexOutOfBoundException?

时间:2011-04-01 07:12:54

标签: android listview selected items

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

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

  2. 当我调试我的代码时,我在我的代码中找到了Array IndexOutOfBoundException ,据我所知,在我的代码中没有这样的例外,因为删除了错误或更少项目

  3. 这是我的代码: -

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

    我只是出于调试目的而捕获了异常。在此先感谢,但请帮忙,因为自从过去两天以来我一直困在这一部分。

3 个答案:

答案 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();