Android 按钮重复点击处理

一. 介绍

问题描述: 用户快速连续点击按钮时, 容易引发各种问题.

网上解决方案: Android优雅地处理按钮重复点击

这篇文章是2018年9月份发的, 300多个赞, 而且综合比较了各种解决方案, 文章中使用AOP+注解的方式处理, 也算是不错的解决方案,

发现问题: 代码还是存在入侵的现象, 虽然只是一个注解, 但是需要在项目的每个onClick加上注解@SingleClick, 如果是已经上线的项目, 需要全局修改, 说不定会漏掉一部分.

二. 框架的使用 (建议使用最新版本)

1. 简单使用

① 导入框架

//项目根目录下,build.gradle

allprojects {
repositories {
...
maven { url 'https://jitpack.io' } //添加
}
}
//app目录下build.gradle
dependencies {
implementation 'com.github.liys666666:DoubleClick:V1.0.4' //添加
}

② 自定义的Application初始化即可

public class AppApplication extends Application{
@Override
public void onCreate() {
super.onCreate();
ViewDoubleHelper.init(this); //默认时间:1秒
// ViewDoubleHelper.init(this, 2000); //自定义点击间隔时间(单位:毫秒)
}
}

如果不需要其它的功能, 到这里就解决了.

2. 如果某个Activity里不需要处理重复点击事件, 怎么办?

解决办法: 让对应的Activity 实现 DoubleClickCancel接口即可.

3. 特殊要求: 只有一部分按钮需要处理重复点击, 怎么办?

用以下方法, 可以自由添加或取消某个View, 如果控件比较多, 可以写成数组, 然后循环处理

//取消hook事件
ViewDoubleHelper.cancelHookView(R.id.btn1);
ViewDoubleHelper.cancelHookView(findViewById(R.id.btn1));
//添加hook事件
ViewDoubleHelper.hookResView(R.id.btn2);
ViewDoubleHelper.hookResView(R.id.btn2, 2000); //自定义时间(单位: 毫秒)
ViewDoubleHelper.hookView(findViewById(R.id.btn2));
ViewDoubleHelper.hookView(findViewById(R.id.btn2), 2000); //自定义时间(毫秒)

优点:

没有入侵原来的代码, 普通的要求一行代码就能解决.

可以随时增加或删除, 可以局部也可以全部, 不会影响原来的代码.

对于有特殊要求的, 也可以单个自定义间隔时间.

缺点:

对于特殊需求还是存在代码入侵现象, 需要在具体的Activity写代码.

2.0版本解决这个问题, 完全不需要在Activity写代码.

2.0使用说明: https://www.jianshu.com/p/df0ef3866cc1

到这里就结束了, 希望能帮到有需要的人, 如果觉得好用, 欢迎star.

技术有限, 如果框架中存在什么问题, 欢迎在下载评论区留言.