2013-05-09 10 views
13

シナリオです: - 私は2つのArrayListjava.lang.IndexOutOfBoundsException:無効なインデックス2は、サイズが2

リストは、画像

に含まれている

postListは今、選択した画像

の位置が含まれていますこれまで画像を選択して削除メニューを押すと、選択した画像が削除されます。

私はdebugのコードを実行しているとき、その罰金と欲望の出力を与えます。

しかし、私はそれを正常モードで実行しているときにクラッシュし、上記に与えるのはexceptionです。ここ

appAdp.list.remove(appAdp.list.get(posList.get(i))); 

logcatを示す

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); 

エラー: -

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) 

このようなその挙動するが、任意の手掛かりを得ていない理由。

ありがとうございました。

答えて

16

あなたがArrayIndexoutofBoundsExceptionを得るでしょう、あなたはArrayListのからelemntを削除され、これまで、その大きさはそれほど減少しますときそのせいで、同じArrayListの上で操作を実行しようとしています。 つまり、appAdp.listからアイテムを削除すると、appAdp.listのサイズも変更されます

あなたのリストに元々3つのアイテムがある場合は、それを検討してください。

あなたは、あなたがappAdp.listから0項目から項目を削除するときに、その大きさは、あなたが位置2にある項目を削除しようとする次回のため2になるだろう、あなたのPOSLISTに0,2

を位置を持っています

保存削除するために別々のリストと使用removeAll(list)方法で削除する必要があるすべての項目:AIOBE

ソリューションを取得しますあなたのappAdp.list

例からアイテム:

ArrayList<yourappListtype> templist=new ArrayList<yourappListtype>(); 
for (int i = 0; i < posList.size(); i++) 
     templist.add(appAdp.list.get(posList.get(i))); 

そして

appAdp.list.removeAll(templist); 
+0

解決策は何ですか.. – Unknown

+0

@CobraAjgar追加されたソリューション – Pragnani

+0

これは私の他のリストですposList .... – Unknown

0

インデックスはゼロから始まることを覚えておいてください。私はあなたが境界例外から抜け出すよう

+1

私は6つの画像を持っている、私はそれらのいずれかを選択することができます、私は5を選択した場合、同じインデックスを返す必要があります。理由は例外 – Unknown

0

、それは配列のインデックスよりも1高い位置を取得するときにエラーがInvalid index 2, size is 2

可能性のある問題がappAdp.list.size()<2

ように、そのことを確認してくださいあなたのposList.size()=2あると思いますappAdp.listには2つ以上のエントリがあります。

if (posList.size() >0) 
i=appAdp.list.size(); 
while(i<=posList.size() && i<=appAdp.list.size()) 
{ 
appAdp.list.remove(appAdp.list.get(posList.get(i))); 
i--; 
} 
+0

"もし(posList.size )> 0)は1から0をチェックします。If条件はif(posList.size()> = 0)でなければなりませんが、これは問題ではなく、これは論理的な問題です。これは間違っています。 –

+0

@AsierAranbarriはい、私は忘れました –

0

あなたは、アダプタのデータソースを変更する前に、あなたは元のデータソースが無効にするために、アダプタのnotifyDataSetInvalidated()関数を呼び出すことができ、その後、データソースの変更が完了した後にコールアダプタのnotifyDataSetChanged()を呼び出します。

関連する問題