ListView에는 SingleSelect 모드, MultiSelect 모드가 있다.
모드 설정
- listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
- listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
SingleSelect 모드에서는 GetSelectedItem을 쓰고
MultiSelect 모드에서는 GetCheckedItemPositions()를 쓴다.
SingleSelectMode
- 할말이 없다.
MultiSelectMode
- GetCheckedItemPositions()의 반환형은 SparseBooleanArray()이고 디버그로 찍어서 보면 전체 아이템에 대해 선택됐는지 안됐는지 boolean값이 들어있다.
그런데 이 SparseBooleanArray에 size() 함수를 호출하면 값이 true인 아이템의 개수(선택된 아이템의 개수)가 나온다. 왜냐하면 이런식으로 쓰라고 만들어놨기 때문
출처 : https://stackoverflow.com/a/12406431/10340370
SparseBooleanArray arr = listView.getCheckedItemPositions();
for(int i = 0 ; i < arr.size() ; i++)
{
int pos = arr.keyAt(i);
Item item = listView.getItemAtPosition(pos);
}
다시 말하자면
리스트뷰의 모드에 따라 호출해야 하는 함수가 다르다는 것.
싱글모드인데 GetCheckedItemPositions()를 호출하면 null이 반환됐던 것 같다.
모르는 사람은 잘못된 길로 샐수있다는 건 큰문제..
'프로젝트 > Android' 카테고리의 다른 글
ListView에 클릭리스너 달기 (0) | 2018.09.24 |
---|---|
Thread와 static 변수 (0) | 2018.09.18 |
자원재활용 contentView (0) | 2018.09.08 |
Android에서 SpreadGrid UI 만들기 (0) | 2018.09.08 |
댓글