如果我最初在xml中设置了复选框状态,则可以正常工作,但是当我在java或Kotlin中动态设置时,它无法正常工作。
就像我设置isChecked = true
时的例子一样,它应该显示填充有强调色的复选框,但它仅显示仅检查有强调色的边框颜色,而没有填充内部的颜色。
查看何时设置isChecked它仅在边框中显示强调色。
如果我设置了复选框状态checked = true
并在Java中设置了isChecked = false
,那么
复选框的Xml代码
<CheckBox
android:checked="false"
android:id="@+id/check_box"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/layout_padding_8dp"
android:layout_width="wrap_content"
android:text="@string/check_box_title"/>
科林代码
check_box.isChecked = false // Setting Uncheck
check_box.isChecked = true // Setting Checked
答案 0 :(得分:0)
我也和你一样。我只在模拟器和一个真实的设备上进行了测试,但是我发现了两种在不设置xml的情况下将其打勾的方法(例如,您需要先从后端获取某些内容以确定它是否必须是否从头开始打勾):
1)使用处理程序的延迟命令
Handler().postDelayed({ checkBox?.isChecked = true }, 300)
2)设置toggle()
后使用isChecked
checkBox?.isChecked = true
checkBox?.toggle()
就好像切换触发了UI更改一样。问题是,从上面的代码中,您将选中您的复选框,但其isChecked
的值为false
。
由于我也必须设置enabled
,并且在使用toggle()
时由于某种原因将其弄乱,所以我采用了第一种方法。我真的希望有人能找到一种更优雅的方式来解决这个问题...
答案 1 :(得分:0)
更好的方法是使用jumpDrawablesToCurrentState
解决此问题。
原因是当您致电setChecked(true)
时,它会执行以下任务:
由于某种原因,当该复选框被隐藏时,它仅执行第一个任务,而第二个任务被跳过。这就是在我的情况下发生此问题的原因。调用jumpDrawablesToCurrentState
可通过同时执行两个任务而不播放动画来解决此问题。