Android 按钮重复点击处理<一行代码解决>
一. 介绍
问题描述: 用户快速连续点击按钮时, 容易引发各种问题.
网上解决方案: Android优雅地处理按钮重复点击
这篇文章是2018年9月份发的, 300多个赞, 而且综合比较了各种解决方案, 文章中使用AOP+注解的方式处理, 也算是不错的解决方案,
发现问题: 代码还是存在入侵的现象, 虽然只是一个注解, 但是需要在项目的每个onClick加上注解@SingleClick, 如果是已经上线的项目, 需要全局修改, 说不定会漏掉一部分.
解决办法: 利用Hook技术, 这里我把解决方法封装成开源库了.
github地址: https://github.com/liys666666/DoubleClick
DoubleClick---3.0版本
DoubleClick---2.0版本
DoubleClick---1.0版本
框架主要有两个功能:
1.无入侵解决按钮重复点击 (本章内容)
2.onClick重复逻辑统一处理
二. 框架的使用 (建议使用最新版本)
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.
技术有限, 如果框架中存在什么问题, 欢迎在下载评论区留言.