1

私は onListItemListener を持つ ListView を持っています。ListView アイテムをタップすると削除されますが、何らかの理由でリストから最後のアイテムを削除すると、アプリがクラッシュしてこのエラーが発生します(java.lang.IndexOutOfBoundsException: Invalid index 3, size is 3)

誰がそれが何を意味するのか分かりますか?

これは私のコードです:

 @Override  
        protected void onListItemClick(ListView l, View v, int pos, long id) {  
            super.onListItemClick(l, v, pos, id);
            adapter.remove(adapter.getItem(pos));
            adapter.notifyDataSetChanged();
        } 
4

4 に答える 4

4

パラメータ値として pos = 3 を渡したと仮定しました。リストのサイズが 3 であるため、最後の要素の位置は 2 である必要があります。

*編集:

リストビューとアダプターの開始インデックスが異なることに注意してください。ListView アイテム pos は最初の位置として "1" から始まり、アダプター (配列など) は最初の位置としてインデックス "0" から始まります。

adapter.remove(adapter.getItem(pos-1)); 
于 2013-02-26T02:59:35.867 に答える
1

私はそれを理解したと信じています.pos変数が1つの数値が高すぎると言ったすべての答えは論理的に見えましたが、私はそれらすべてを試しましたが、うまくいきませんでした.

リストから最後の項目を削除すると、ListView を更新しようとしましたが、更新するものが何もないため、アプリがクラッシュしたため、コードを少し変更しました少し、それは今うまくいきます!:)なぜそれが機能するのか完全にはわかりませんが、機能します!

すべての答えをありがとう!

@Override  
    protected void onListItemClick(ListView l, View v, int pos, long id) {  
        super.onListItemClick(l, v, pos, id);

        if (adapter.getCount() != adapter.getItemId(pos)) {
           adapter.remove(adapter.getItem(pos));
           adapter.notifyDataSetChanged();     
       }        
}  
于 2013-02-26T03:26:44.310 に答える
0

ドキュメントによると、アイテムを削除するための値としてidを使用しているはずです。

このような:

adapter.remove(adapter.getItem(id));
于 2013-02-26T03:06:29.240 に答える
0

次のことを試してください: lsitview に 4 つのアイテムがある場合、lat アイテムはインデックス 3 になり、最初のアイテムはインデックス 0 になります。

@Override  
        protected void onListItemClick(ListView l, View v, int pos, long id) {  
            super.onListItemClick(l, v, pos, id);
            adapter.remove(adapter.getItem(pos-1));
            adapter.notifyDataSetChanged();
        } 
于 2013-02-26T06:28:44.043 に答える