问题
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();
.......
}