2012-09-06 5 views
0

입니다 :이 코드는 내 Adapter에 배치하고 ListView을 조정한다안드로이드 : java.lang.IndexOutOfBoundsException : 잘못된 인덱스 (9), 크기는 내 다음 코드에 문제가 있어요 9

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

를, 그것은 작동 모든 행에 대한하지만, 다음과 같은 오류를 반환 마지막 행을 선택할 때 충돌 : 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. 

답변

1

다음이 시도 : 그것은 시각과 활동이 문장의 전체 의미입니다 아래

HashMap<String,String> nextRow = null; 
if (position + 1 < listLength) 
{ 
    nextRow = data.get(position+1); 
} 
if (nextRow != null) 
{ 
    //whatever it is you are trying to achieve by detecting the next row 
} 
+0

위대한 !! 그것은 일했다!! 감사! – iJar

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

대신

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

인덱스는 항상 1 다음

에서 당신이 얻을 것이다되지 0에서 시작

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 

TOTAL = 9

+0

nextRow은 행을합니다. 그러나 마지막 행 아래에 다음 행이 없기 때문에 나는 그 행하는 것을 중단하기를 원합니다. 그래서 배열의 크기와 비교합니다. – iJar

+0

'int row = position +1; 대신에'int row = position;'을 시도해보십시오. – MAC

+0

data.get (9)는 매번 IndexOutOfBoundsException을 발생시킬 것입니다. 그리고 data.get (8)이 배열의 마지막 요소라는 것을 알 수 있습니다. 적어도 완전히 똑같은 아이디어를 가진 2 명이 완전히 틀렸다고 생각하지 않으셨습니까? 어떻게 된 거예요? –

0

자바는 0을 기준으로 인덱싱을 사용합니다. 즉, 어떤 위치에 0이 있음을 의미합니다. 즉, 모든 목록에서 0 - (n-1) 개의 항목이 목록에 있음을 의미합니다.

당신은 변경해야

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

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


에 당신이가는 최대 INDEX가 목록에서 9 번째 요소 인 8이되도록. 배열은 다음과 같습니다 : [0] - 첫 번째 요소 [1] - 두 번째 요소 .... 등등.

+0

위의 답변에 대한 내 의견을 참조하십시오. – iJar

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

Kai 나는 당신의 코드를 시험해 보았지만 여전히 동일한 결과를 제공합니다. 마지막 행을 터치하는 순간 오류가 발생합니다. – iJar

+0

흠 ... 나는 당신이 당신의 방법의 전신을 나의 코드로 바꿀 수 있다고 생각하지 않는다. –

+0

"HATSIKIDEE !!" 적 인쇄? –