Android防止用户快速点击触发

Android的按钮或某些组件在接受用户点击时候,会触发提交或响应用户事件,比如提交一次数据到网络服务器,假设用户点击速度太快,以至于这两次点击事件相差无几,会造成接下来的业务逻辑处理异常,因此需要对用户快速点击事件做一层拦截,我实现了一个安全的拦截用户快速点击事件类:

package zhangphil.app;

import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.util.Log;
import android.view.View;

import androidx.annotation.NonNull;

public abstract class SafeClickListener implements View.OnClickListener {
    private final int WHAT = 0xa01;
    private boolean canClick = true;

    private int GAP = 3000;//相隔3秒的点击才有效。

    private Handler handler = new Handler(Looper.myLooper()) {
        @Override
        public void handleMessage(@NonNull Message msg) {
            canClick = true;
        }
    };

    @Override
    public final void onClick(View view) {
        delay();

        if (!canClick) {
            Log.d("拦截点击", "无效点击,点击太快了");
            return;
        }

        canClick = false;
        onSaveClick(view);
    }

    public abstract void onSaveClick(View view);

    private void delay() {
        handler.removeMessages(WHAT);

        Message msg = handler.obtainMessage();
        msg.what = WHAT;
        handler.sendMessageDelayed(msg, GAP);
    }
}

这个类在处理用户点击事件时候,只有大于3秒间隔的点击事件才会认为是有效点击,两次点击事件小于3秒则认为是无效的连续快速点击,被认为是无效点击事件。

使用方式,例如给一个Button添加点击事件响应回调onSaveClick():

package zhangphil.app;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button button=findViewById(R.id.button);
        button.setOnClickListener(new SafeClickListener() {
            @Override
            public void onSaveClick(View view) {
                Log.d("点击","有效");
            }
        });
    }
}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zhangphil

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值