Android - 以编程方式更改交换机的状态,而不触发 OnCheckChanged 侦听器


我正在寻找一种以编程方式更改Android Switch小部件状态的方法,而无需触发。

我的第一个想法是将其换成一个,但由于这只注册点击,你不仅可以点击,还可以滑动开关,那么它并不适合目的,好像用户要将开关从关滑动到打开,那么开关实际上什么都不做,因为用户没有点击...

如果有人对此有解决方案或明智的解决方案,那就太好了。switch.setChecked(true);OnCheckedChangedlistenerOnClickListener


答案 1

在调用 setCheck() 函数之前将侦听器设置为 null,并在调用 setCheck() 函数之后启用它,如下所示:

switch.setOnCheckedChangeListener (null);
switch.setChecked(true);
switch.setOnCheckedChangeListener (this);

参考更改复选框值而不触发选中更改


答案 2

每个 CompoundButton(两个状态按钮 - 开/关)都有一个按下状态,仅当用户按下视图时才为真。

只需在开始实际逻辑之前在侦听器中添加一个检查:

if(compoundButton.isPressed()) {
    // continue with your listener
}

这样,以编程方式更改选中的值就不会触发不需要的代码。

@krisDrOid答案。


推荐