问题
在开发项目时遇到使用Button的performClick()方法无响应,这里记录下解决方法。callOnClick()同理。
解决方案
- post到主线程再调用(这是看网友解答的):使用view.post(new Runnable());可以解决大多数问题,但是我使用后仍未解决我的问题;
btn_create_order.post(new Runnable() {
@Override
public void run() {
btn_create_order.performClick();
}
});
- post并加延时:使用view.postDelayed(new Runnable());可以解决;
btn_create_order.postDelayed(new Runnable() {
@Override
public void run() {
btn_create_order.callOnClick();
}
},300);
原因
其实上面方案已经可以解决了,简单记录下原因。
- 点击事件是UI线程完成的,而代码调用performClick()可能没有在UI线程所以会调用失效;
- 而加了post仍无效的原因,你可能想都想不到,是因为我以前为了避免按钮点击事件连续点击触发bug,在基类做了处理,连续点击的时间间隔如果比较小就直接忽略,所以点击view1后去主动调用performClick的msg被系统忽略了(自己挖的坑,早晚要填的,哈哈哈~);
网友评论