RecyclerView에서 RadioGroup을 사용할 수 없다보니
RecyclerView Adapter에서 단일선택할 수 있도록 구현해 주었다
한참 헤맸는데 해결하고 나니 왜 헤맸는지 모를정도로 간단했다...😥
RadioButton이 아닌 CheckBox로 해도 적용됨!
📄 RecyclerViewAdapter.kt
class RecyclerViewAdapter : RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder>() {
//select여부를 저장할 ArrayList
private var selectCheck: ArrayList<Int> = arrayListOf()
private var groupList = arrayListOf(
GroupData("그룹미지정"),
GroupData("그룹1"),
GroupData("그룹2"),
GroupData("그룹3")
)
//selectCheck를 초기화해주고, 디폴트선택값을 "그룹 미지정"으로 설정
init {
for(i in groupList){
if(i.groupName == "그룹미지정"){
selectCheck.add(1)
}else{
selectCheck.add(0)
}
}
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.onBind(groupChangeList[position])
}
inner class ViewHolder(private val binding: ItemRadioButtonBinding) :
RecyclerView.ViewHolder(binding.root) {
fun onBind(item: String) {
binding.rbGroupName.apply {
text = item
//select 여부를 확인하고 상태를 변경
isChecked = selectCheck[adapterPosition] == 1
setOnClickListener {
for (k in selectCheck.indices) {
if (k == adapterPosition) {
selectCheck[k] = 1
} else {
selectCheck[k] = 0
}
}
notifyDataSetChanged()
}
}
}
}
}
※ ViewHolder를 inner class 로 설정해 주었지만, inner class 는 outer 클래스를 참조한 뒤 해제하지 못하면 메모리 누수를 야기하고 이를 찾기가 쉽지 않다고 한다.
일단은 위의 방법을 사용했지만 inner class를 사용하지 않는 방법을 찾아보도록 해야겠다