
回复
setComponentStateChangedListener方法判断组件当前状态
今天看到有坛友问到按钮点击调用setComponentStateChangedListener方法监控组件状态改变,触发了两次这个是正常吗?那接下来我来分享一下我的理解,有不对的请指出,谢谢!
首先我们先看布局页面,就是个简单的按钮,代码如下
然后我们看Java代码如下
然后我们看一下点击按钮打印的日志,如下图
为了验证是否都是同一个按钮测试的,我也将按钮的Id打出来了,我们可以看出事件方法里面触发的两次是同一个按钮,那么这两次状态改变是针对哪些状态呢,我找到ComponentState类的状态如下图,
看了以后一脸蒙啊,完全对不上,这怎么搞,后来研究了半天,发现这个类里面还有个方法名叫isStateMatched,然后我想了一下是不是要用这个去匹配,然后我在setComponentStateChangedListener方法里面加入了如下测试代码
然后我再次单击测试按钮然后,我们看一下点击效果
然后得出的结论按钮为什么触发了两次,一次是按钮按下的状态,按下以后然后是恢复原来的未知状态。
接下来我又添加了几个按钮测试了一下手动禁用和手动按下状态,完全代码如下
Java代码如下
然后在手动触发按下按钮,你又会发现一个有趣的现象就是直接在onStart方法里面调用setPressState方法和在按钮里面调用setPressState方法监控到状态码竟是不一样的,代码如下图
运行结果如下图
所以肯定要靠isStateMatched来判断。