今天遇到一个奇怪的问题,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()判断是否为手动点击,只处理手动点击的即可。

本文详细记录了一次因HDMI设备的USB触屏线在拔除时导致界面控件如Checkbox、Switch等状态异常的案例。在排除人为因素后,发现控件的setChecked方法与onCheckedChanged监听器存在冲突,最终通过buttonView.isPressed()判断解决了该问题。
8084

被折叠的 条评论
为什么被折叠?



