먼저 리스트뷰에서는 다음처럼 설정한다.

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


버그(?)라고 해야 할지 모르겠으나 안드로이드는 적은 메모리를 사용하는 모바일에서 작동하는 프로그램이기때문에 자원의 재사용에 중점을 많이 두었기에 그런 현상이 발생된다. 


+ Recent posts