問題
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();
.......
}