您的位置:首页 > 移动开发 > Android开发

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

2016-09-08 14:12 477 查看
    闲话不多,直接干货

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

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

    @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了,

笔者没有研究这种办法,感觉这种办法不太常用吧.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息