关于避免按钮短时间内频繁点击或过快点击的处理方法

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/Loki_M/article/details/78295881

开发过程中,遇到了测试提出的bug,原因是做网络请求,生成一条数据的时候,网络响应慢,点击提交按钮没反应,多次点击,导致生成多条数据,数据出现问题。

出现问题,第一反应就是,一旦点击了网络请求按钮,就要设置它为不可点击,等请求回调,无论成功还是失败,再次设置为可点击。

部分代码:


requestNetData();

mBtLoading.setClickable(false);

@Override
public void onError(Call call, Exception e, int id) {
    mBtLoading.setClickable(true);
    Toaster.showToast(GetParkDataActivity.this, "数据保存失败");
    return;
}

@Override
public void onResponse(String response, int id) {
    mBtLoading.setClickable(true);
}

但是这样也会存在问题,我们都知道JAVA代码是按顺序执行的,如果当前手机网络不好,这个地方还是会出现多次点击事件,无法禁止快速的重复点击事件,

所以,有必要做一个点击时间间隔处理,和双击返回的原理一样。然后我写了以下代码:

public class ClickUtils {
    private static long lastTime;
    private static long curTime;
    private static Toast mToast;

    public static boolean mClick() {
        if (System.currentTimeMillis() - lastTime >= 5000) {
            curTime = System.currentTimeMillis();
            lastTime = System.currentTimeMillis();
            return true;
        }
        return false;
    }
}


在这里我写了一个点击类,用的时候直接加判断就好了:

    @OnClick(R.id.test)
    public void onClick() {
        if (ClickUtils.mClick()) {
	// 下面是个吐司,我只是抽了一下  第一次点击到5s之后的点击响应这个事件
            ClickUtils.mToaster(this, "111");
        } else {
	// 第一次点击之后 接下来的5s内 走这里
            ClickUtils.mToaster(this, "222");
        }
    }

这样可以在业务代码里进行判断了,可以设置是否可点击,多少时间内可点击。


技术小白,开发探索中...如有什么不足,还请指正。

展开阅读全文

没有更多推荐了,返回首页