kotlin:Radio按钮单选控件

kotlin:Radio button single check control

我有一个简单的应用程序,它以 RecyclerView 片段开始,每一行都有 RadioButton,但问题是我不能只检查一个单选按钮我需要它,如果我在一个旧的取消选中自动 这是我的适配器

class StoresAdapter constructor(private val activety: MainActivity, private var listOfData: ArrayList<StoresModeling>,
                            val listener: ContentListener) : RecyclerView.Adapter<StoresAdapter.ViewHolder>() {



override fun getItemCount(): Int = listOfData.size
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
    //var inf = ViewHolder(LayoutInflater.from(parent!!.context).inflate(R.layout.min_mark_modling, parent, false))

    return ViewHolder(LayoutInflater.from(parent!!.context).inflate(R.layout.stores_tick, parent, false),getItemViewType(transition_position))

}
var selectedPosition:Int = 0
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
    holder.bind(listOfData[position], listener, listOfData)

}

inner class ViewHolder(itemView: View?,position: Int) : RecyclerView.ViewHolder(itemView) {

    fun bind(Data: StoresModeling, listener: ContentListener, listOfData: ArrayList<StoresModeling>) {

        val dataListin2 = listOfData[adapterPosition]

        var titlein = dataListin2.title
        var cityin = dataListin2.city
        var codein = dataListin2.code


        itemView.title.text = titlein
        itemView.city.text = cityin
        itemView.code.text = codein
        /////// my radioButton /////
        itemView.RB



    }
}


interface ContentListener {
    fun onItemClicked(Data: StoresModeling) {


    }


}

很简单。

步骤 1. 使用 CheckBox 而不是 RadioButton 因为它们不能像文档中所说的那样取消选中

However, contrary to a CheckBox, a radio button cannot be unchecked by the user once checked.

步骤 2. 在您的 class StoresModeling

上创建 属性 var isChecked: Boolean = false

步骤 3.擦除你的所有正文ViewHolder(你用错了),只写它

class ViewHolder(itemView: View?) : RecyclerView.ViewHolder(itemView)

并在 onBindViewHolder

中填充 StoresModeling

第 4 步。 更改 isChecked 的状态(在您的 onBindViewHolder 内),取消选中所有其他状态并通过以下代码通知您的适配器:

checkBox.setOnCheckedChangeListener { buttonView, isChecked ->
      if (isChecked) {
             data.isChecked = true
             listOfData.forEach {
                    if (!it.equals(data)) it.isChecked = false
             }
             notifyDataSetChanged()
      }
}