You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Kotlin中RecyclerView复选框与开关联动实现方案

功能需求

Activity中的开关控制

  • 开关开启时,RecyclerView内所有Checkbox需全部勾选(设为true)。
  • 开关关闭时,RecyclerView内所有Checkbox需全部取消勾选(设为false)。

手动操作Checkbox的联动逻辑

  • 用户可手动勾选或取消单个Checkbox。
  • 若所有Checkbox被手动勾选,开关需自动切换为开启状态。
  • 若开关处于开启状态时,任意Checkbox被手动取消勾选,开关需自动切换为关闭状态。
实现代码

BhkItemCheckboxAdapter 代码

class BhkItemCheckboxAdapter(
private val context: Context,
private var items: List<BHK>,
private val onRadioButtonClick: OnCheckButtonClick
) : RecyclerView.Adapter<BhkItemCheckboxAdapter.ItemViewHolder>() {
var isAllChecked = false

inner class ItemViewHolder(view: View) : RecyclerView.ViewHolder(view) {
    val headTextView: TextView = view.findViewById(R.id.headTextView)
    val llRoot: LinearLayout = view.findViewById(R.id.llRoot)
    val cbType: CheckBox = view.findViewById(R.id.cbType)

    init {
        cbType.setOnCheckedChangeListener { _, isChecked ->
            if (isChecked) {
                llRoot.setBackgroundResource(R.drawable.black_background)
                headTextView.setTextColor(context.getColor(R.color.search_field_child_text_white))
            } else {
                llRoot.setBackgroundResource(R.drawable.gray_background)
                headTextView.setTextColor(context.getColor(R.color.search_field_child_text_black))
            }
            items[adapterPosition].checked = isChecked
            checkAllChecked()
        }
    }
}

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

override fun onBindViewHolder(holder: ItemViewHolder, position: Int) {
    val item = items[position]
    holder.headTextView.text = item.value
    holder.cbType.isChecked = item.checked

    if (item.checked){
        holder.llRoot.setBackgroundResource(R.drawable.black_background)
        holder.headTextView.setTextColor(context.getColor(R.color.search_field_child_text_white))
    }
    else{
        holder.llRoot.setBackgroundResource(R.drawable.gray_background)
        holder.headTextView.setTextColor(context.getColor(R.color.search_field_child_text_black))
    }


    holder.itemView.setOnClickListener {
        holder.cbType.isChecked = !holder.cbType.isChecked
        items[position].checked = holder.cbType.isChecked
        onRadioButtonClick.onClick(items[position].id)
        checkAllChecked()
    }
}

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

fun updateItems(checked: Boolean) {
    isAllChecked = checked
    for (item in items) {
        item.checked = checked
    }
    notifyDataSetChanged()
    onRadioButtonClick?.onAllChecked(checked)
}

private fun checkAllChecked() {
    for (item in items) {
        if (!item.checked) {
            isAllChecked = false
            onRadioButtonClick?.onAllChecked(false)
            return
        }
    }
    isAllChecked = true
    onRadioButtonClick?.onAllChecked(true)
}
}

Activity 代码

private fun setBedrooms(bhk: List<BHK>) {
    if (bhk != null) {
        llProperty.visibility = View.VISIBLE
        bhkList = bhk;
        lvBhkType = findViewById(R.id.lvBhkType)

        lvBhkType.layoutManager =
            GridLayoutManager(this, 3)

        val itemClickListener = object : OnCheckButtonClick {
            override fun onClick(id: String?, value: String?) {

                if (id != null) {
                    bhkId += "$id,"

                }
            }

            override fun onAllChecked(checked: Boolean) {
                rbBHKAll.isChecked = checked
            }

        }

        bhkAdapter = BhkItemCheckboxAdapter(this, bhk, itemClickListener)
        lvBhkType.adapter = bhkAdapter
    }
}
rbBHKAll.setOnCheckedChangeListener { _, isChecked ->
        bhkId = if (isChecked) {
            bhkList.joinToString(",") { it.id.toString() }
        } else {
            ""
        }
        bhkAdapter?.updateItems(isChecked)
    }

内容的提问来源于stack exchange,提问作者Sne

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 06:12:33