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();
           .......
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章