【问题标题】:Prevent chip from double click防止芯片双击
【发布时间】: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-&gt;false-&gt;true-&gt;false 一样改变它的值。但我只是不想在onCheckedChangeListener 中运行我的代码,如果chip is 已经检查。 我认为一种解决方案是将我选择的chip 保存在fragmentViewModel 中。你的解决方案是什么?

【问题讨论】:

  • 为什么不能简单地使用 isChecked 值?如果那是假的,那么以前它是真的,对吧?还是您希望用户只检查一次?您可能会发现来自 Evgeniy 的 this answer 很有帮助。这与您的问题类似,但适用于 Android 中的 Switch。
  • 那是因为假设用户第一次点击chip1,结果为true,然后他点击第二次,结果为false,现在用户点击第三次,结果为true。所以用户在同一个芯片上执行了 3 次点击。我想要的是,当用户第二次点击同一个芯片时,不要调用 onCheckedChangeListener,或者不要评估其中的代码。像这样。

标签: java android android-chips


【解决方案1】:

我相信您可以在chipGroup 上设置setOnCheckedChangeListener 而不是每个单独的芯片。该侦听器将传入一个 ID 和 isChecked 作为参数。我相信在群组中使用此回调将有助于解决您的问题。希望这对您遇到的问题有所帮助。

更多信息https://material.io/components/chips/android#using-chips

【讨论】:

  • 谢谢,我会看看这个。
  • 但是如何确定 isChecked 状态?
  • 你看我需要一些替代品。当用户单击芯片时,该芯片已经将其值更改为 true,我无法确定在单击之前是否检查了芯片。我想我需要将当前选择的芯片保存在某处,以便在执行点击后进行检查。
  • 监听方法通过ChipGroup。所以你应该可以参考group.getCheckedChipIds。然后遍历该列表,看看它是否包含checkedId
  • 好吧,您可以通过否定您从中检索到的值是否被选中来做到这一点。如果您获取group.getCheckedChipIds 并且 chekedId 存在于列表中,则否定该值,这应该会为您提供更改前的值。如果这是有道理的。现在,如果您尝试跟踪所有更改,那么您可以使用地图或其他东西来跟踪。
猜你喜欢
  • 1970-01-01
  • 2019-02-05
  • 2011-09-11
  • 2016-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-20
相关资源
最近更新 更多