有没有什么解决方法可以在编程中使用 switch.setChecked(true);
改变Switch小部件的状态,但不触发 OnCheckedChangedlistener()
?
switch.setChecked(true);
会自动触发OnCheckedChangedlistener()
,但我需要它仅在用户手动更改状态时才触发。所以我需要停止
switch.setChecked(true);
触发OnCheckedChangedlistener()
有没有什么解决方法可以在编程中使用 switch.setChecked(true);
改变Switch小部件的状态,但不触发 OnCheckedChangedlistener()
?
switch.setChecked(true);
会自动触发OnCheckedChangedlistener()
,但我需要它仅在用户手动更改状态时才触发。所以我需要停止
switch.setChecked(true);
触发OnCheckedChangedlistener()
不要使用 onClickListener
来处理切换事件,应该使用
mySwitch.setOnCheckedChangeListener { compoundButton, isChecked ->
if (compoundButton?.isPressed == true)
viewModel.onMySwitchChanged(isChecked)
}
检查 if (compoundButton?.isPressed == true)
防止在设置开关状态时像mySwitch.isChecked = true
或mySwitch.isSelected = true
一样运行viewModel.onMySwitchChanged
我通过使用setOnClickListener()
而不是setOnCheckedChangeListener()
解决了这个问题,然后我可以在单击侦听器内使用isChecked
来知道Switch
是否被选中,例如:
switchView.setOnClickListener {
val isChecked = switchView.isChecked
// Do something with the check status
}
switch.setOnCheckChangedListener(null);
switch.setChecked(true);
switch.setOnCheckChangedListener(mOnCheckChangedListener);
OnCheckChangedListener()
函数。 - Safaswitch.post(() -> switch.setOnCheckChangedListener(mOnCheckChangedListener))
。 - egoldx2种方法:
每当您以编程方式进行更改时,请维护一个布尔变量并将其设置为true。在OnCheckedChangeListener()中,检查是否来自用户或程序。
(不推荐) 在您以编程方式进行更改之前,将yourSwtich.setOnCheckedChangeListener(null)设置为null。然后在下一行再次设置侦听器
OnCheckedChangeListener()
中设置布尔变量时,即使我在switch.setChecked(true/false)
之前已经更改它,它也将始终为true,因为一旦调用了OnCheckedChangeListener()
,它就会变为true。2- 我尝试了这个解决方案,但重新设置监听器后它的行为就像用户点击了开关并调用了OnCheckChangedListener()
。 - Safa
OnCheckedChangedlistener()
,而我需要它仅在用户手动更改状态时才触发。 - Safaswitch.setChecked(true/false)
来根据API的响应更改状态并进行调试时,我发现这段代码被调用了。@Override public void onCheckedChanged(SwitchButton view, boolean isChecked) { if (isChecked) { requestPermissions(); } } - Safa