ListView 안의 Item 중에 CheckBox가 들어가게 되면 List 영역을 클릭해도 클릭이 되지 않고 CheckBox만 클릭이 되도록 되어 있습니다. 이러한 경우에 List 가 클릭 되도록 처리하려면 CheckBox의 layout에 아래와 같이 속성을 설정하면 됩니다.
android:focusable=”false”
안드로이드 설정 페이지의 리스트 UI 같이 체크박스도 클릭이 안되록 처리 하려면 clickable 설정을 추가하면 됩니다.
android:clickable=”false”
이렇게 List를 클릭되도록 처리 했다면 onItemClick 이벤트에서 아래와 체크가 되고, 체크가 풀어지도록 처리해야 합니다.
CheckBox deleteCheckBox = ((CheckBox)view.findViewById(R.id.checkbox));
if(deleteCheckBox != null) {
deleteCheckBox.setChecked(dataAdapter.IsDeleteCheck(position));
}
if(deleteCheckBox != null) {
deleteCheckBox.setChecked(dataAdapter.IsDeleteCheck(position));
}
dataAdapter 에서 데이터들을 가지고 있기 때문에 IsDeleteCheck 라는 함수를 만들어서 확인을 하고 있습니다.
IsDeleteCheck 와 같은 함수를 사용하기 전에 상위에서 Check 값을 한번 체크해서 바꿔주는 로직이 필요합니다.
저는 아래와 같은 함수로 만들었습니다. 실제로 boolean 값을 ! 를 사용해 반전만 시켜주었습니다.
dataAdapter.dataResult.ChangeDeleteCheck(position);
마지막으로 Adapter의 getView 함수에서 위와 같이 CheckBox를 얻어와서 값에 데이터에 따라서 setChecked가 될 수 있도록 처리를 해주면 됩니다. 이 부분을 해주지 않으면 스크롤을 할 때 체크 박스의 값이 다시 설정 되지 않고 계속 남아있는 문제가 발생합니다.
안드로이드 2.1 버전 기준으로 작성이 되었습니다.