您需要在“父”复选框上设置一个侦听器,以便在“父”复选框的状态发生变化时切换“子”复选框。
请参见此处设置监听器:
https://developer.android.com/reference/android/widget/CompoundButton#setOnCheckedChangeListener(android.widget.CompoundButton.OnCheckedChangeListener)
这是一个例子:
val childCheckBoxes = listOf(checkBox1, checkBox2, checkBox3)
parentCheckBox.setOnCheckedChangeListener { _, isChecked ->
childCheckBoxes.forEach {
it.isChecked = isChecked
}
}
同时,听起来您需要为每个子 CheckBox 添加侦听器,以更新父 CheckBox 状态 - 这样,如果选中了任何子 CheckBox,则父 CheckBox 也会被选中。请记住,如果您致电
parentCheckBox.isChecked = true
它还会调用parentCheckBox 的OnCheckedChangeListener,你最终会得到无限递归。因此,在像这样设置isChecked 时,您可能希望禁用 OnCheckedChangeListener。可能看起来像这样:
val theRealListener = { _, isChecked ->
childCheckBoxes.forEach {
it.isChecked = isChecked
}
}
parentCheckBox.setOnCheckedChangeListener(null)
parentCheckBox.isChecked = whatever
parentCheckBox.setOnCheckedChangeListener(theRealListener)
“不确定”状态不包含在默认的 Android CheckBox 中 - 它只能是“选中”或“未选中”。您将需要为此使用自定义的东西。也许这个库对你有用:
https://github.com/sevar83/indeterminate-checkbox
如果您决定使用这个库,看起来您需要使用 setOnStateChangedListener 而不是 setOnCheckedChangeListener,但想法保持不变。