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使用說明: http://www.lxweimin.com/p/df0ef3866cc1
到這里就結束了, 希望能幫到有需要的人, 如果覺得好用, 歡迎star.
技術有限, 如果框架中存在什么問題, 歡迎在下載評論區留言.