본문 바로가기
Android 개발/RecyclerView, List

Checkable interface 로 selectable한(선택할 수 있는) RecyclerView 리스트 만들기

by Developer88 2017. 1. 20.
반응형

안드로이드 앱을 만들면서 설정UI를 만들다 보면,

카톡의 알람음 선택UI처럼,

리스트를 누르면 그 아이템이 선택되도록 해야하는 경우가 있습니다.


오늘은 그 때 구현해야하는 Checkable 인터페이스 를 사용하여, 

커스텀 리스트를 만들어보도록 하겠습니다.



1.  Checkable interface

 

우선, Checkable interface가 무엇인지, 소스코드를 먼저 보고 가겠습니다~.

view를 checkable하게 만들기위해서 사용하는 거군요.

그리고, setChecked, isChecked, toggle() 을 구현해야 되네요.



그럼 이제 실제로 코드에 적용해보면서, CustomList를 만들어 보겠습니다.



2.  RecyclerView 준비

 

RecyclerView를 이용해서 List를 만든다음 Checkable을 implement 하려고 하는데요.

RecyclerView를 만들줄 아신다면 아래 3번으로 넘어가셔도 되구요,

혹시 잘 모르신다면, 아래 링크를 눌러서, 리사이클러뷰에 대해 정리한 글을 읽어주세요~.


>>> RecyclerView 로 listview 정복 <<<



3.  Checkable 구현


Checkable interface는 View를 선택할 수 있도록 해주는 데요.

유저가 선택할 View는 어디에 있을까요?

네, ViewHolder가 가지고 있습니다.


그럼 어디에 구현해야 할지도 아시겠죠?

ViewHolder에 Checkable interface를 구현하겠습니다.




먼저, setChecked()메소드를 구현하는데요, 


만약 check가 되면, checkbox_on_background이미지를 보여주고,

check가 되지 않으면, checkbox_off_background이미지를 보여주도록 하였는데요.

이미지를 그리는 것은 Glide라는 라이브러리를 이용하였습니다.


참고로, Glide에 관해는 아래링크에서 확인하실 수 있어요.

>>> Android 에서 원형, 사각형 이미지 로딩할 때는 Glide <<<


( 위에서 사용한 mContext는 생성자에서 인자로 가져왔습니다.)



나머지 메소드들도 아래와 같이 구현을 하면되는데요.

check가 되어있는지 확인하는 isChecked와 check값의 true, false를 전환하는 toggle메소드를 구현하였습니다.



이제 Adapter에서 이 메소드들을 제때에 구현해주기만 하면 되겠습니다.



4.  Adapter 구현


Adapter의 onBindViewHolder에서 

인자로 받은 position이, 유저가 미리 선택해놓은 (혹은 디폴트 값인) mSelectedMp3PlaylistNumber 와 같은 경우에만

위에서 구현한 setChecked(true)를 해줘서 해당 이미지가 보이도록 해줍니다.




5.  OnClick 구현


마지막으로, onSoundItemClickListener 라고 하는 interface를 만들고,

Adapter에서 구현하여서, 리스트를 클릭하면 해당 위치의 아이템이 선택되도록 하려고 합니다.


RecyclerVIew에서 구현하는 interface와 콜백에 관한 글은 아래링크에서 확인하실 수 있습니다.

>>> RecyclerView 로 listview 정복 Part.2 <<<


아래와 같이 adapter에서 OnSoundItemClickListener 라고하는 interface를 구현해줍니다. 

만약 유저가 터치한 아이템이 기존에 선택되어있는(혹은 디폴트인) 값이 아니라면,

선택되도록 해주고, notifyDataSetChanged()를 통해서 데이터가 변경된것을 Adapter에게 알려주면 됩니다.



최종적으로 다음과 같은 화면을 보실 수 있습니다.




이렇게 해서, Checkable을 구현한 커스텀 리스트를 정리해보았습니다.


728x90

댓글