Android 复选框父子关系
我想根据中给出的材料设计准则,在Android中为Checkbox创建父子关系 我想要一个父复选框,在该复选框下将有子复选框,当选中父复选框时,所有子复选框都将被选中 如果父复选框未选中,则所有子复选框均未选中 如果选中了部分(但不是全部)子复选框,则父复选框将变为不确定复选框 我查看了开发人员文档,但没有这方面的信息 此外,我检查了材料设计文档,他们给出了相同的指南,但是,他们没有给出任何示例项目来执行相同的操作Android 复选框父子关系,android,checkbox,parent-child,Android,Checkbox,Parent Child,我想根据中给出的材料设计准则,在Android中为Checkbox创建父子关系 我想要一个父复选框,在该复选框下将有子复选框,当选中父复选框时,所有子复选框都将被选中 如果父复选框未选中,则所有子复选框均未选中 如果选中了部分(但不是全部)子复选框,则父复选框将变为不确定复选框 我查看了开发人员文档,但没有这方面的信息 此外,我检查了材料设计文档,他们给出了相同的指南,但是,他们没有给出任何示例项目来执行相同的操作 我尝试使用嵌套创建复选框的父子关系,但没有成功。有人知道如何实现这一点吗?您需要
我尝试使用嵌套创建复选框的父子关系,但没有成功。有人知道如何实现这一点吗?您需要在“父”复选框上设置一个侦听器,以便在“父”复选框的状态更改时切换“子”复选框 请参见此处设置侦听器: 下面是一个例子:
val childCheckBoxes = listOf(checkBox1, checkBox2, checkBox3)
parentCheckBox.setOnCheckedChangeListener { _, isChecked ->
childCheckBoxes.forEach {
it.isChecked = isChecked
}
}
同时,听起来您需要将侦听器添加到每个子复选框中,以更新父复选框状态-这样,如果选中了任何子复选框,父复选框也会被选中。记住,如果你打电话
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复选框中不包括“不确定”状态-只能“选中”或“未选中”。您需要为此使用一些自定义的东西。也许此库对您有用:
如果您决定使用此库,看起来您需要使用
setOnStateChangedListener
而不是setOnCheckedChangeListener
,但想法保持不变。您需要在“父”复选框上设置一个侦听器,以便在“父”复选框的状态更改时切换“子”复选框
请参见此处设置侦听器:
下面是一个例子:
val childCheckBoxes = listOf(checkBox1, checkBox2, checkBox3)
parentCheckBox.setOnCheckedChangeListener { _, isChecked ->
childCheckBoxes.forEach {
it.isChecked = isChecked
}
}
同时,听起来您需要将侦听器添加到每个子复选框中,以更新父复选框状态-这样,如果选中了任何子复选框,父复选框也会被选中。记住,如果你打电话
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复选框中不包括“不确定”状态-只能“选中”或“未选中”。您需要为此使用一些自定义的东西。也许此库对您有用:
如果您决定使用此库,看起来您将需要使用setOnStateChangedListener
而不是setOnCheckedChangeListener
,但想法不变