android中防止按钮连击的方法
程序员文章站
2022-05-14 15:55:28
...
一直以来,Rx 家族都给我们带来太多惊喜,之前已经对 RxJava1.x 有了一个基本的了解,在Rx家族中也有一个RxBinding,能有效的防止按钮连击的问题,关于它的使用,大家可以参考以下链接:
http://blog.csdn.net/u011164565/article/details/53455388
但是,我觉得其实现防止按钮连击的话在代码中还是有些别扭,因为我一直都比较习惯类似以下的处理方式
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.finger:
//获取验证码的通讯
String phone="15172401936";
mPresenter.getRegisterSmsCode(phone);
LogUtil.e("====我点击了======"+DateUtil.getNowTime());
break;
default:
break;
}
}
这样可以将点击事件集中起来处理,当然我也想它在最大限度上不要破坏这种集中处理的方式,然后就写了一个工具类,代码如下:
package com.test.helper;
import android.view.View;
/**
* Created by Admin on 2017/5/18.
* 防止按钮连击工具类
*
*/
public class DoubleClickUtil{
private static long mLastClick;
public static boolean isDoubleClick(long milliseconds){
//大于一秒方个通过
if (System.currentTimeMillis() - mLastClick <= milliseconds){
return true;
}
mLastClick = System.currentTimeMillis();
return false;
}
public static void shakeClick(final View v, long milliseconds) {
v.setClickable(false);
v.postDelayed(new Runnable(){
@Override
public void run() {
v.setClickable(true);
}
}, milliseconds);
}
}
@Override
public void onClick(View v) {
//防止连击
if(DoubleClickUtil.isDoubleClick(1000)){
return;
}
switch (v.getId()){
case R.id.finger:
//获取验证码的通讯
String phone="15172401936";
mPresenter.getRegisterSmsCode(phone);
LogUtil.e("====我点击了======"+DateUtil.getNowTime());
break;
default:
break;
}
}
若使用第二种方法,在activity中的调用是这样的:
@Override
public void onClick(View v) {
//防止连击
DoubleClickUtil.shakeClick(v,1000);
switch (v.getId()){
case R.id.finger:
//获取验证码的通讯
String phone="15172401936";
mPresenter.getRegisterSmsCode(phone);
LogUtil.e("====我点击了======"+DateUtil.getNowTime());
break;
default:
break;
}
}
OK,以上即时对Android处理防止双击的一种方法。
上一篇: RxView学习及实现按钮防抖功能
下一篇: PHP下传多图片总是报错