Android安卓关于避免按钮快速多次点击问题解决办法

    闲话不多,直接干货

    在我寻找之下,大概分为三种解决办法.

     方法一:在点击事件的开始把它设为不可点击,再在点击事件的结束设置为可点击

    @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub
        switch (v.getId()) {
        case R.id.btnStartLive:
            //这个是防止用户多次点击,造成方法多次执行,出现错误
            btStartLive.setClickable(false);


         //gowhere()方法是自己写的 点击事件想要执行的方法   

      gowhere();



            //这个也是防止用户多次点击,造成方法多次执行,出现错误 与btStartLive.setClickable(false);相呼应
            btStartLive.setClickable(true);
            break;
        
     
        
        default:
            break;
        }

    }
优点:简单便利,易上手,,,,

缺点:如果gowhere()开启子线程 既没有多大用了 但是如果在子线程中 写btStartLive.setClickable(true);方法 会出现一种情况, 如果子线程执行方法执行中出现问题,执行不到这个方法,或者说是如果程序逻辑复杂多变 会出现很多种情况,既有接口回调,调用sdk 还有开启多个子线程 ,这个方法根本不行.

 

方法二:自定义点击事件 :设置每隔几秒才可以点击下一次

   public abstract class NoDoubleClickListener implements OnClickListener {

//每隔5000点击一次 MIN_CLICK_DELAY_TIME 为设置的间隔单位是毫秒
        public static final int MIN_CLICK_DELAY_TIME = 5000;
        private long lastClickTime = 0;

        @Override
        public void onClick(View v) {
            long currentTime = Calendar.getInstance().getTimeInMillis();
            if (currentTime - lastClickTime > MIN_CLICK_DELAY_TIME) {
                lastClickTime = currentTime;
                onNoDoubleClick(v);
            }
        }

        protected void onNoDoubleClick(View v) {
            
            
        }   
    }


在代码中调用:

//其中的button为自己布局中的按钮

button= (Button) findViewById(R.id.btnStartLive);
        button.setOnClickListener(new NoDoubleClickListener() {
            @Override
            public void onNoDoubleClick(View v) {
              Toast.makeText(ReleaseLiveActivity.this, "点击,,点击", Toast.LENGTH_SHORT).show();
            }
        });


这样就每隔5秒钟可以点击一次了

网上虽然有很多的例子 但是 总是少了     protected void onNoDoubleClick(View v) {          }这一行代码. 也许初学者会有些疑问.  

优点:两次点击每隔时间可以固定 避免了连续点击的执行的bug

缺点:两次点击之间的时间虽然固定,但是这个值 多少秒 这个值不好确定,如果时间长 用户体验太差,时间特别短,如果里面有子线程 可能子线程的还没执行完毕



方法三:

我们优雅一点,使用throttleFirst操作符来解决按钮被多次点击的问题,当然这涉及到RxJava了,

笔者没有研究这种办法,感觉这种办法不太常用吧.








  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值