Android开发Android开发经验谈Android进阶之路

Android 无入侵解决按钮重复点击---onClick处理&

2019-08-22  本文已影响51人  liys_android

Android 按钮重复点击处理<一行代码解决>

一. 介绍

问题描述: 用户快速连续点击按钮时, 容易引发各种问题.
网上解决方案: Android优雅地处理按钮重复点击

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

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

解决办法: 利用Hook技术, 这里我把解决方法封装成开源库了.
github地址: https://github.com/liys666666/DoubleClick

框架主要有两个功能:
1.无入侵解决按钮重复点击 (本章内容)
2.onClick重复逻辑统一处理

二. 框架的使用

1. 简单使用

① 导入框架

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

② 自定义的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); //自定义时间(毫秒)

优点:

  1. 没有入侵原来的代码, 普通的要求一行代码就能解决.
  2. 可以随时增加或删除, 可以局部也可以全部, 不会影响原来的代码.
  3. 对于有特殊要求的, 也可以单个自定义间隔时间.

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

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

上一篇下一篇

猜你喜欢

热点阅读