今天遇到一個奇怪的問題,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()判斷是否爲手動點擊,只處理手動點擊的即可。