【发布时间】:2021-03-09 16:20:05
【问题描述】:
我有一个chipgroup 和一些chips 里面。我遍历这个chipgroup,获取每个chip,并为它添加一个checkedChangeListener。
for (int i = 0; i < chipGroup.getChildCount(); i++) {
final Chip chip = (Chip) chipGroup.getChildAt(i);
chip.setOnCheckedChangeListener((buttonView, isChecked) -> {
//My code
});
}
所以当我打开我的应用并点击 chip 时,例如chip1,它选择它。然后,当我第二次单击 chip1 时,它也会触发 checkedChangeListener 并在其中运行我的代码。 isChecked 状态没有帮助,因为它只是在每次点击时像 true->false->true->false 一样改变它的值。但我只是不想在onCheckedChangeListener 中运行我的代码,如果chip is 已经检查。
我认为一种解决方案是将我选择的chip 保存在fragment 或ViewModel 中。你的解决方案是什么?
【问题讨论】:
-
为什么不能简单地使用 isChecked 值?如果那是假的,那么以前它是真的,对吧?还是您希望用户只检查一次?您可能会发现来自 Evgeniy 的 this answer 很有帮助。这与您的问题类似,但适用于 Android 中的 Switch。
-
那是因为假设用户第一次点击chip1,结果为true,然后他点击第二次,结果为false,现在用户点击第三次,结果为true。所以用户在同一个芯片上执行了 3 次点击。我想要的是,当用户第二次点击同一个芯片时,不要调用 onCheckedChangeListener,或者不要评估其中的代码。像这样。
标签: java android android-chips