Android switch控件触发onCheckedChanged引起的bug

问题

Switch在调用非手动触发,其他地方setchecked的时候会触发onCheckedChanged,有时候不需要触发这个监听,仅仅是改变check状态;利用buttonView.isPressed()只会在手动的时候才会为true

   @Override
    public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
        if (!buttonView.isPressed()) {
            return;
        }
        doSomething();
}

特殊情况:

如果封装了Switch,比如Setting应用的SwitchBar,ToggleSwitch作为这个view的成员变量,点击view调用setchecked,如下:

public class SwitchBar extends LinearLayout implements CompoundButton.OnCheckedChangeListener,
        View.OnClickListener {
        private ToggleSwitch mSwitch;
          
      public void addOnSwitchChangeListener(OnSwitchChangeListener listener) {
      ........
      }
    @Override
    public void onClick(View v) {
        ........
       setChecked(isChecked);
    }
      ......
}

如果我们向在手动点击这个View才执行相关操作,就这样写

    @Override
    public void onSwitchChanged(Switch switchView, boolean isChecked) {
           //外层包裹的view和里面的Switch都没按下,就return
           //虽然外层view包括switch,但是switch仍然能获取焦点,所以要判断两个
            if (!switchView.isPressed() && !mSwitchBar.isPressed()) {
                return;
            }
           doSomething();
           .......
    }
发布了67 篇原创文章 · 获赞 42 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/w1764662543/article/details/90695657