android中View.performClick()触发无反映

2020-05-28  本文已影响0人  android_zyq

问题

在开发项目时遇到使用Button的performClick()方法无响应,这里记录下解决方法。callOnClick()同理。

解决方案

  1. post到主线程再调用(这是看网友解答的):使用view.post(new Runnable());可以解决大多数问题,但是我使用后仍未解决我的问题;
btn_create_order.post(new Runnable() {
                    @Override
                    public void run() {
                        btn_create_order.performClick();
                    }
                });
  1. post并加延时:使用view.postDelayed(new Runnable());可以解决;
btn_create_order.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        btn_create_order.callOnClick();
                    }
                },300);

原因

其实上面方案已经可以解决了,简单记录下原因。

  1. 点击事件是UI线程完成的,而代码调用performClick()可能没有在UI线程所以会调用失效;
  2. 而加了post仍无效的原因,你可能想都想不到,是因为我以前为了避免按钮点击事件连续点击触发bug,在基类做了处理,连续点击的时间间隔如果比较小就直接忽略,所以点击view1后去主动调用performClick的msg被系统忽略了(自己挖的坑,早晚要填的,哈哈哈~);
上一篇下一篇

猜你喜欢

热点阅读