当我最初在Java或Kotlin中进行设置时,CheckBox的isChecked无法正常工作

时间:2018-07-10 11:33:58

标签: android xml android-layout kotlin android-checkbox

如果我最初在xml中设置了复选框状态,则可以正常工作,但是当我在java或Kotlin中动态设置时,它无法正常工作。

就像我设置isChecked = true时的例子一样,它应该显示填充有强调色的复选框,但它仅显示仅检查有强调色的边框颜色,而没有填充内部的颜色。

enter image description here

查看何时设置isChecked它仅在边框中显示强调色。

如果我设置了复选框状态checked = true并在Java中设置了isChecked = false,那么

enter image description here

复选框的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

2 个答案:

答案 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)时,它会执行以下任务:

  1. 更改边框颜色。
  2. 在复选框内设置检查的动画。

由于某种原因,当该复选框被隐藏时,它仅执行第一个任务,而第二个任务被跳过。这就是在我的情况下发生此问题的原因。调用jumpDrawablesToCurrentState可通过同时执行两个任务而不播放动画来解决此问题。