Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

To pervent android View.OnClickListener -> onClick(View )method call multiple time,compatible with butterknife,databanding,rxbinding and lambda exper

Notifications You must be signed in to change notification settings

chouchouyu/Android-DebounceClickPlugin

Repository files navigation

Android-DebounceClickPlugin [logo]

public abstract class NoDoubleClickListener implements View.OnClickListener {

    public static final int MIN_CLICK_DELAY_TIME = 1000;
    private long lastClickTime = 0;

    @Override
    public void onClick(View v) {
        long currentTime = SystemClock.elapsedRealtime();
        if (currentTime - lastClickTime > MIN_CLICK_DELAY_TIME) {
            lastClickTime = currentTime;
            onNoDoubleClick(v);
        }
    }

    protected abstract void onNoDoubleClick(View view);
}

submitButton.setOnClickListener(new NoDoubleClickListener() {  
        @Override  
        public void onNoDoubleClick(View v) {  
            submitOrder();  
        }  
}); 
  • 这段代码是不是很熟悉....
  • 项目大了,一个个click的数手酸不酸...
  • 能不能把butterknife,databanding,rxbinding,lambda表达式,里的点击一并处理了...
--------------------其实我是看到没有人写才弄了这个库的--------------------

You need Android-DebounceClickPlugin!

效果

接入前

[before]

接入后

[after]

它将在gradle build 时,自动在每个onClick(View)添加if语句判断

用法

Download

  1. 在项目根目录下的build.gradle 添加
    dependencies {
       ...
        classpath 'com.github.susan:debounceclick-plugin:1.0.1'
         ...
         }
  1. 部分项目中配置插件
// 在 apply plugin: 'com.android.application'
//或者 apply plugin: 'com.android.library'

apply plugin: 'com.github.susan.debounceclick'
DebounceClick {
    includePackages = []
    excludePackages = []
    debug = true
}
  • 默认情况下,扫描文件的目录来自于module下的AndroidManifest.xml下package所声明的目录 [packageName]

  • includePackages(添加修改文件路径)/excludePackages(排除修改文件路径)

  • debug = true 显示编译过程中详细日志

[logger]

  1. 如果编译通过。更改过了信息会显示在module/build/outputs/DebounceClick/mapping[Mapping]

一般如果文件中有内容就说明插件生效,

相反,如果没有内容,就说明没本插件没生效。

没生效时app运行和没接入之前一样。

如果发现没生效,欢迎跟给我提issue。:-D

不想处理的方法

添加@DebounceClickMark即可 [passMethod]

修改间隔时间

在项目编译成功,并生成Mapping文件后,在Application项目下做全局设置

     public class MyApp extends Application {
     
         @Override
         public void onCreate() {
             super.onCreate();
             DebounceClickHandler.FROZEN_WINDOW_MILLIS = 700L;
       
         }

butterknife

考虑butterknife自带有DebouncingOnClickListener(但是不是通过毫秒判断的),

如果任然希望通过毫秒来判断事件点击,在includePackages添加如下内容。

apply plugin: 'com.github.susan.debounceclick'

DebounceClick {
    includePackages = ['butterknife.internal.DebouncingOnClickListener']
    excludePackages=[]
    debug = true
}

lambda

如果项目gradle里android节点有声明jackOptions,将使得本插件失效。

android {
   //不要这么写
//        jackOptions {
//            enabled true
//        }
}

不用jackOptions也能lambda的解决方案,见demo.

rxbinding

  1. rxbinding和butterknife一起使用时,操作和butterknife操作一致,

  2. rxbinding单独使用时,includePackages添加如下内容。

apply plugin: 'com.github.susan.debounceclick'
DebounceClick {
    //if your project contains rxbinding and without butterKnife
    includePackages = ['com.jakewharton.rxbinding.view.ViewClickOnSubscribe']
    excludePackages=[]
    debug = true
}

databanding

databanding会引入的点击事件并非是View.OnClickListener -> onClick(View view)的方法,所以本插件添加注解@DebounceClickExtra专门处理方法不是onClick的方法。 [extrClickMethod] 如上图所示onXXClick方法会被处理,而没有注释的onwithoutClick不会被处理。

Logcat(1.0.2+)

可以通过Logcat DebounceClickHandler 查看插件运行情况 [logcat]

Thanks to

About

To pervent android View.OnClickListener -> onClick(View )method call multiple time,compatible with butterknife,databanding,rxbinding and lambda exper

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published
Morty Proxy This is a proxified and sanitized view of the page, visit original site.