【问题标题】:Select only one check box ; RecyclerView; Kotlin只选择一个复选框;回收站视图;科特林
【发布时间】:2020-03-30 17:05:32
【问题描述】:

这是我的代码,我只想选择一个复选框,如果选择了另一个复选框,我希望它在 unchecked 中转换


class AuthorizationFormAdapter(lista: List<Procedures>?) : RecyclerView.Adapter<AuthorizationFormAdapter.ViewHolder>() {

    val lista: List<Procedures>? = lista
    lateinit var array: BooleanArray

    class ViewHolder(val view: View) : RecyclerView.ViewHolder(view) {
        val text: TextView? = null
        val checkBox: CheckBox? = null
    }

    override fun onCreateViewHolder(parent: ViewGroup, p1: Int): ViewHolder {
        val view = LayoutInflater.from(parent.context).inflate(R.layout.card_authform, parent, false)
        return ViewHolder(view)
    }

    override fun getItemCount(): Int {
        return lista!!.size
    }

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {
        holder.view.auth_name.text = lista!![position].name_procedure
        holder.view.cb_auth.setOnClickListener {
            if (holder.view.cb_auth.isChecked) {
                holder.view.cb_auth.isSelected = true
            } else if (!holder.view.cb_auth.isChecked) {
                holder.view.cb_auth.isChecked = false
            }
        }

    }
}

而 Xml 只是我卡片中的一个 checkBox 和 textView 非常感谢您的帮助

【问题讨论】:

  • 我只看到一个CheckBox。另一个在哪里?
  • 医学博士。 Asaduzzaman 我做一个回收站视图
  • 添加您的Procedures 班级

标签: android kotlin checkbox android-recyclerview android-adapter


【解决方案1】:

您必须在 Procedures 中创建一个字段来存储 checked/unchecked 状态

var isChecked: Boolean = false

然后当用户选择其他时,在您的适配器存储 lastCheckedPositionunchecked 中。

class AuthorizationFormAdapter(lista: List<Procedures>?) : RecyclerView.Adapter<AuthorizationFormAdapter.ViewHolder>() {

    var lastCheckedPosition: Int = 0

    ....

    override fun onBindViewHolder(holder: ViewHolder, position: Int) {

        val procedure = lista!![position]

        holder.view.auth_name.text = procedure.name_procedure
        holder.view.cb_auth.isChecked = procedure.is_checked

        holder.view.cb_auth.setOnCheckedChangeListener { buttonView, isChecked -> 

            if(isChecked) {
                lista!![lastCheckedPosition].is_checked = false
                lastCheckedPosition = position
            }

            lista!![position].is_checked = isChecked
            notifyDataSetChanged() // This is important to reload the list
        }

    }
}

【讨论】:

    猜你喜欢
    • 2018-04-20
    • 2016-05-15
    • 2017-08-10
    • 2020-08-06
    • 1970-01-01
    • 2021-11-21
    • 2013-10-21
    • 1970-01-01
    相关资源
    最近更新 更多