Categories: Android

[안드로이드] ListView 안에 CheckBox가 있을 경우 클릭 처리 하기

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

 dataAdapter 에서 데이터들을 가지고 있기 때문에 IsDeleteCheck 라는 함수를 만들어서 확인을 하고 있습니다.
IsDeleteCheck 와 같은 함수를 사용하기 전에 상위에서 Check 값을 한번 체크해서 바꿔주는 로직이 필요합니다.
저는 아래와 같은 함수로 만들었습니다. 실제로 boolean 값을 ! 를 사용해 반전만 시켜주었습니다.

dataAdapter.dataResult.ChangeDeleteCheck(position);

 마지막으로 Adapter의 getView 함수에서 위와 같이 CheckBox를 얻어와서 값에 데이터에 따라서 setChecked가 될 수 있도록 처리를 해주면 됩니다. 이 부분을 해주지 않으면 스크롤을 할 때 체크 박스의 값이 다시 설정 되지 않고 계속 남아있는 문제가 발생합니다.


안드로이드 2.1 버전 기준으로 작성이 되었습니다.

dingpong

Share
Published by
dingpong

Recent Posts

LFS error at git checkout in Jenkins

Problem stdout: stderr: Downloading xxxx.a (83 MB) error: git-lfs smudge -- 'xxxx.a' died of signal…

3년 ago

플레이모빌 크리스마스 XXL 6629 산타 해외직구 구매가 배송비

https://www.playmobil.de/playmobil-xxl-weihnachtsmann/6629.html 구매가 : 48.49 유로 (플레이모빌 독일 홈페이지) 결제하는데 안되서 PayPal 로 결제하니 잘 잔행…

3년 ago

코카콜라 제로 355ml 72캔 구매가 (캔당 453원)

롯데온에서 355ml 24캔 롯데카드로 구매시 13,210원 https://www.lotteon.com/p/product/PD36294 APP으로 35,000원 이상 구매시 7,000 포인트 적립 행사…

4년 ago

경동나비엔 온수매트 EQM541-QS (퀸사이즈) 구입가

구입 매장 : 현대 홈쇼핑 (홈쇼핑 방송 중) 모바일 앱 http://www.hyundaihmall.com/front/pda/itemPtc.do?slitmCd=2114353981 최종 결제 가격 :…

4년 ago

PostMessage에 shared_ptr과 같은 스마트 포인터 넣기

PostMessage의 WPARAM 이나 LPARAM 으로 shared_ptr 와 같은 스마트 포인터 객체를 넘기고 싶은 경우가 있습니다.…

4년 ago

RC2255 – named STRINGTABLEs are not allowed

Visual Studio 에서 작업 중 이러한 컴파일 에러가 발생한 케이스가 있었습니다. 이 경우에는 .rc 파일에…

4년 ago