今天遇到一个奇怪的问题,hdmi设备的usb触屏线(Usb接口)在拔掉的时候,界面的Checkbox,Switch等控件会响应CompoundButton.OnCheckedChangeListener,很明显,通过debug(debug模式开启显示指针位置)可以明显发现屏幕没有任何点击事件,可以确认非人为导致的状态变化,另外也发现程序调用控件的setChecked方法,也会走到onCheckedChanged,最终确认onCheckedChanged和setChecked存在冲突。
冲突解决方案:
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
// 人为点击
if (buttonView.isPressed()) {
// TODO 人为点击流程
return;
}
}
即:通过buttonView.isPressed()判断是否为手动点击,只处理手动点击的即可。