먼저 리스트뷰에서는 다음처럼 설정한다.
예) listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
그러면 이제 체크 상태를 ListView가 관리하게 된다. 그런데, custom view를 쓰면 ListView가 그 안에 있는 뷰 중 Checkable이 있으면 checked 상태를 바꾼다. 이 점을 이용하면 checkbox와 연동하게 할 수 있다.
getView에서는 checkbox를 다음과 같이 설정한다. 안드로이드의 ListView에서는 focusable 뷰가 포함되어 있으면 onItemClick을 비롯한 여러 가지 ListView의 기본 동작이 안 먹는다. 그래서 CheckBox에서 focusable을 빼는 것. 그러면 리스트의 항목을 클릭할 때 checkbox가 연동되게 된다. 그런데, 여기까지만 하면 checkbox를 직접 클릭할 때는 그 상태가 ListView와 연동되지 않으므로 checkbox의 clickable을 빼야 한다.
예) CheckBox checkbox = (CheckBox) convertView.findViewById(R.id.Checkbox);
checkbox.setChecked(((ListView)parent).isItemChecked(position));
checkbox.setFocusable(false);
checkbox.setClickable(false);
버그(?)라고 해야 할지 모르겠으나 안드로이드는 적은 메모리를 사용하는 모바일에서 작동하는 프로그램이기때문에 자원의 재사용에 중점을 많이 두었기에 그런 현상이 발생된다.
'Android > Tip&Tech' 카테고리의 다른 글
줌인되는 커스텀 리스트 뷰 소스 (0) | 2015.09.04 |
---|---|
[펌]안드로이드 구글 맵 반경그리기 (1) | 2015.01.25 |
Android 갤러리에서 filepath(Action_PICK) (0) | 2015.01.22 |
Android StrictMode Mode 설정/해제하기 (0) | 2015.01.19 |
안드로이드에서 카메라 또는 갤러리 호출 해서 처리하기 (0) | 2015.01.19 |