当我最初在 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 在使用文本设置属性时显示自定义字体错误,但在代码中设置时工作正常

在通知回调中设置时,标签不会出现在标签栏项目上

在 ViewModel 中设置时 ListView SelectedItem 未突出显示

在 UINavigationController 中设置时图像不显示