0

レイアウトにsimple_list_item_multiple_choiceリストビューが 1 つあり、選択したすべてのアイテムをそこから削除しようとしています。私はそれを削除する方法を知っていますが、アイテムの削除中に2つの大きな問題があります:-

  1. 私のプログラムは、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{}
}

デバッグ目的でのみ例外をキャッチしました。事前に感謝しますが、この2日間からこの部分で立ち往生しているため、助けてください.

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 = 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 に答える
1

見た目から、これを変更する必要があります

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

for(int i = 0; i < size; i++)
于 2011-04-01T07:18:34.203 に答える