[Kotlin] RecyclerView에서 RadioButton 단일선택 하기

장똑대·2021년 7월 9일
0

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를 사용하지 않는 방법을 찾아보도록 해야겠다

profile
장똑대와 안드로이드

0개의 댓글