Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/388.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 防止芯片双击_Java_Android_Android Chips - Fatal编程技术网

Java 防止芯片双击

Java 防止芯片双击,java,android,android-chips,Java,Android,Android Chips,我有一个芯片组和一些芯片。我循环遍历这个芯片组,获取每个芯片,并为其添加一个checkedChangeListener for (int i = 0; i < chipGroup.getChildCount(); i++) { final Chip chip = (Chip) chipGroup.getChildAt(i); chip.setOnCheckedChangeListener((buttonView, isChecked) -&g

我有一个
芯片组
和一些
芯片
。我循环遍历这个
芯片组
,获取每个
芯片
,并为其添加一个
checkedChangeListener

for (int i = 0; i < chipGroup.getChildCount(); i++) {
            final Chip chip = (Chip) chipGroup.getChildAt(i);
            chip.setOnCheckedChangeListener((buttonView, isChecked) -> {
                 //My code
            });
        }
for(int i=0;i{
//我的代码
});
}
因此,当我打开我的应用程序并点击
chip
,例如
chip1
,它就会选择它。然后,当我第二次点击
chip1
时,它也会触发
checkedChangeListener
,并在其中运行我的代码。
isChecked
状态没有帮助,因为它只是在每次单击时更改它的值,如
true->false->true->false
。但是如果
芯片已经被检查过,我就不想在
onCheckedChangeListener
中运行我的代码。
我认为一个解决方案是将我选择的
芯片
保存在
片段
视图模型
中。您的解决方案是什么?

我相信您可以在芯片组上设置一个
设置checkedChangeListener
,而不是每个芯片。该侦听器将传入一个ID,并作为参数进行检查。我相信在小组中使用此回调将有助于解决您的问题。希望这有助于解决您遇到的问题


有关

的更多信息,为什么不能简单地使用isChecked值?如果这是假的,那么以前它是真的,对吗?还是希望用户只检查一次?你可能会发现来自Evgeny的建议很有帮助。这与你的问题类似,但对于Android中的一个开关,这是因为假设用户第一次点击chip1,结果现在为真,然后他第二次点击,结果为假,现在用户第三次点击,结果现在为真。所以用户在同一个芯片上点击3次。我想要的是,当用户第二次点击同一个芯片时,不要调用onCheckedChangeListener,或者不要计算其中的代码。类似这样的。谢谢,我会看看这个。但是我怎么才能确定isChecked状态呢?你看我需要一些替代品。当用户执行点击芯片时,芯片已经将其值更改为true,我无法确定在点击之前是否检查了芯片。我想我需要将当前选择的芯片保存在某个地方,以便在执行单击后进行检查。侦听器方法会传递芯片组。因此,您应该能够引用
group.getCheckedChipIds
。然后遍历该列表,查看它是否包含
checkedd
。您可以通过对从中检索到的值求反来实现这一点。如果您抓取
组.getCheckedChipIds
并且该复选框存在于列表中,则将该值取反,这将给出更改前的值。如果这有道理的话。现在,如果您试图跟踪所有更改,那么您可以使用地图或其他东西来跟踪。