0

次のコードに問題があります。

view.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick (View v) {
        int row = position +1;
        int listLength = data.size();
        HashMap<String,String> nextRow = data.get(position+1);
        if (row < listLength ) {
            nextRow.put("greyedOut","false");
        } else {
            System.out.println("HATSIKIDEE!!");
        }
        notifyDataSetChanged();
        System.out.println(row);
        System.out.println(listLength);
    }
});

このコードはmyに配置され、Adapterを調整しますListView。すべての行で機能しますが、最後の行を選択するとクラッシュし、次のエラーが返されます。java.lang.IndexOutOfBoundsException: Invalid index 9, size is 9

私が理解していないのは、System.out.println()の出力がifステートメントに従っているということです。

    1 of 9
    2 of 9
    3 of 9
    4 of 9
    5 of 9
    6 of 9
    7 of 9
    8 of 9

At 9 of 9 it crashes.
Please help me how to solve this error.
4

4 に答える 4

1
HashMap<String,String> nextRow = data.get(position);

それ以外の

HashMap<String,String> nextRow = data.get(position+1);

インデックスは常にからでは0なくから始まります1

それからあなたは得るでしょう

0 of 9
1 of 9
2 of 9
3 of 9
4 of 9
5 of 9
6 of 9
7 of 9
8 of 9

合計 = 9

于 2012-09-06T08:06:54.100 に答える
1
int row = position + 1;
int listLength = data.size();
HashMap<String,String> nextRow = null;
if(row < listLength)
{
   nextRow = data.get(row);
}
if(nextRow != null)
{
   nextRow.put("greyedOut","false");
   notifyDataSetChanged();
}
else 
{
   System.out.println("HATSIKIDEE!!");
}    
System.out.println(row);
System.out.println(listLength);
于 2012-09-06T08:16:20.920 に答える
0

Javaはゼロベースのインデックスを使用します。これは、位置0に何かがあることを意味します。これは、どのリストにも0(n-1)個のアイテムがあることを意味します。

変更する必要があります

HashMap<String,String> nextRow = data.get(position+1);


HashMap<String,String> nextRow = data.get(position);

そのため、移動するINDEXの最大値は8になります。これは、リストの9番目の要素です。配列は次のようになります。[0]-1番目の要素[1]-2番目の要素....など。

于 2012-09-06T08:09:29.443 に答える