kotlin: переключатель контроля одиночной кнопки - PullRequest
0 голосов
/ 05 июня 2018

У меня есть простое приложение, которое запускается с фрагментом 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 Ответ

0 голосов
/ 05 июня 2018

Это просто.

Шаг 1. Используйте CheckBox вместо RadioButton, потому что их нельзя убрать, как сказано в документации

Однако, в отличие от CheckBox, переключатель не может быть отключен пользователем после проверки.

Шаг 2. Создайте свойство var isChecked: Boolean = false в своем классе StoresModeling

Шаг 3. Сотрите все тело вашего ViewHolder (вы используете его неправильно), напишите просто

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

И заполните ваш StoresModeling внутриваш onBindViewHolder

Шаг 4. Измените состояние (внутри вашего onBindViewHolder) вашего isChecked, снимите отметку со всех остальных и уведомите адаптер с помощью следующего кода:

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