当我最初在 java 或 Kotlin 中设置时,CheckBox 的 isChecked 不起作用
Posted
技术标签:
【中文标题】当我最初在 java 或 Kotlin 中设置时,CheckBox 的 isChecked 不起作用【英文标题】:CheckBox's isChecked not working when I set initially in java or Kotlin 【发布时间】:2018-12-18 05:38:57 【问题描述】:如果我最初在 xml 中设置复选框状态,它工作正常,但是当我在 java 或 Kotlin 中动态设置时,它没有按我预期的那样工作。
就像我设置 isChecked = true
时的示例一样,它应该显示用强调色填充的复选框,但它只显示检查边框颜色和强调色,但没有填充内部颜色。
查看我何时设置 isChecked 它仅在边框中显示强调色。
如果我在java中设置复选框状态checked = true
并设置isChecked = false
它看起来像这样
复选框的xml代码
<CheckBox
android:checked="false"
android:id="@+id/check_box"
android:layout_
android:layout_marginTop="@dimen/layout_padding_8dp"
android:layout_
android:text="@string/check_box_title"/>
Kotlin 代码
check_box.isChecked = false // Setting Uncheck
check_box.isChecked = true // Setting Checked
【问题讨论】:
显示一些代码示例,你尝试过什么?check_box.isChecked = false
这是编译时错误。这不可能。使用setChecked(true)
方法。
@pa1pal 我认为您从未使用过 kotlin,调用 checkbox.setChecked(true) 和 checkbox.isChecked = true 在 kotlin 中是相同的。
您是否尝试在 ViewPager 中使用子 Fragment 执行此操作?我知道这种情况可能会导致问题,尤其是如果父级是 Fragment,无论其是否为 v4。
【参考方案1】:
我和你有同样的经历。我只在模拟器和一个真实设备中对此进行了测试,但我发现了 2 种方法可以让它在没有在 xml 中设置的情况下打勾(例如,你需要先从后端获取一些东西以确定它是否必须是从一开始就打勾):
1) 使用Handler的延迟命令
Handler().postDelayed( checkBox?.isChecked = true , 300)
2) 设置isChecked
后使用toggle()
checkBox?.isChecked = true
checkBox?.toggle()
就好像切换触发了 UI 更改。问题是,从上面的代码中,您将选中您的复选框,但它的isChecked
值将是false
。
由于我也必须设置enabled
并且在使用toggle()
时它搞砸了,所以我选择了第一种方式。我真的希望有人找到一种更优雅的方法来解决这个问题......
【讨论】:
【参考方案2】:更好的方法是使用jumpDrawablesToCurrentState
来解决这个问题。
原因是当您调用setChecked(true)
时,它会执行以下任务:
-
更改边框颜色。
在复选框内设置检查的动画。
由于某种原因,当复选框被隐藏时,它只执行第一个任务而跳过第二个任务。这就是为什么在我的情况下会出现这个问题。调用jumpDrawablesToCurrentState
通过同时执行两个任务而不播放动画来解决此问题。
【讨论】:
嗨,为什么jumpDrawablesToCurrentState
解决这个问题:) 如果您有任何具体原因,请写下您的答案
原因是当您调用setChecked(true)
时,它会执行以下任务 1. 更改边框颜色。 2.在checkBox里面设置check的动画。由于某种原因,当复选框被隐藏时,它只执行第一个任务而跳过第二个任务。这就是为什么在我的案例中出现这个问题的原因。调用jumpDrawablesToCurrentState
通过同时执行两个任务而不播放动画来解决此问题。希望它有所帮助:)以上是关于当我最初在 java 或 Kotlin 中设置时,CheckBox 的 isChecked 不起作用的主要内容,如果未能解决你的问题,请参考以下文章
ios8/xcode6.1:在情节提要中设置时在运行时忽略自定义字体
自定义字体仅在 Interface Builder 中设置时可用
UILabel 在使用文本设置属性时显示自定义字体错误,但在代码中设置时工作正常