안드로이드 개발 질문/답변
(글 수 45,052)
public void onItemClick(AdapterView<?> parent, View v, int pos, long id){
int count = 0;
SparseBooleanArray arr;
arr=lv.getCheckedItemPositions();
if(parent == lv){
tv = (TextView)findViewById(R.id.pos);
for(int i = 0; i<arr.size(); i++){
if(arr.get(i) == true){
count++;
}
}
tv.setText(count+"명 선택됨");
}
}위와 같이 체크박스에 몇 개가 체크되어있는지 세는 메서드가 있는데요, 지금 리스트뷰에 60개의 목록이 들어있습니다.
그런데,
v
ㅁ
ㅁ
ㅁ
ㅁ
ㅁ
v
...
와 같이 체크되어 있을때, (스크롤이 가장 위에 있을 때, 7번째는 화면에 보이지 않습니다)
다시 말하면, 체크된 것과 다음 체크된 것이 6칸 이상 차이나면
count가 올라가지 않는 현상이 발생하네요...
왜 이런걸 까요?
_공지사항 읽었음
2011.01.13 23:31:35
이건 adapter의 getView를 이해하고 보셔야 합니다. getView가 호출될때 넘어오는 convertView는 앞서 생성한 리스트 아이템뷰의 재활용 입니다.
화면에 1번부터 7번까지 아이템이 보인다고 가정해보겠습니다. 스크롤을 해서 1번이 없어지고 2번부터 8번까지 화면에 보여지게 되면 8번이 생성되는게 아니고 1번에서 생성한 뷰를 가지고 8번으로 오게 됩니다. 1번에서 만약에 체크박스가 있어서 체크 했었다면 스크롤을 해보면 8번 아이템에서는 체크하지 않았는데도 불구하고 뷰를 재활용하기 때문에 체크된 상태가 되는겁니다.



