問題描述 比較經(jīng)典的一個問題就是, 在個人中心判斷是否登錄這個問題了. 在個人中心點擊的時候, 很多按鈕需要判斷是否登錄. 于是這樣寫.
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.btn1:
if(!isLogin){
return;
}
break;
case R.id.btn2:
if(!isLogin){
return;
}
break;
case R.id.btn3:
if(!isLogin){
return;
}
break;
case R.id.btn4:
break;
}
}
解決辦法1: 使用AOP+注解的方式
每個重復的邏輯我還得跑去封裝一個注解, 好麻煩, 我比較懶, 不太喜歡這種方式.
解決辦法2: 用hook方式, 我已經(jīng)封裝成框架.
github地址: https://github.com/liys666666/DoubleClick
框架主要有兩個功能:
1.無入侵解決按鈕重復點擊
2.onClick重復邏輯統(tǒng)一處理 (本章內(nèi)容)
一. 框架引入
//項目根目錄下,build.gradle
allprojects {
repositories {
...
maven { url 'https://jitpack.io' } //添加
}
}
//app目錄下build.gradle
dependencies {
implementation 'com.github.liys666666:DoubleClick:V1.0.4' //添加
}
//初始化
ViewDoubleHelper.init(application); //點擊間隔時間. 默認時間:1秒
二. 使用方法:
① 自定義需要處理邏輯的類, 繼承BaseCustomClickListener.
例如: 登錄處理.
public class LoginClickListener extends BaseCustomClickListener {
public static boolean isLogin = false;
@Override
public boolean isNext(View v) {
//判斷登錄邏輯 (onClick前執(zhí)行)
return isLogin; //true繼續(xù)執(zhí)行onClick, false不再執(zhí)行
}
@Override
public void after(View view) {
//onClick后 執(zhí)行
}
}
②Activity中
//統(tǒng)一處理
int[] ids = {R.id.btn1, R.id.btn2, R.id.btn3, R.id.btn4}; //需要處理的id
for (int i = 0; i < ids.length; i++) {
ViewDoubleHelper.customHookResView(ids[i], new LoginClickListener());
// ViewDoubleHelper.customHookView(findViewById(ids[i]), new LoginClickListener());
}
缺點:
還是存在代碼入侵現(xiàn)象, 需要在具體的Activity寫代碼.
2.0版本解決這個問題, 完全不需要在Activity寫代碼.
2.0使用說明: http://www.reibang.com/p/df0ef3866cc1
到這里就結束了, 希望能幫到有需要的人, 如果覺得好用, 歡迎star.
技術有限, 如果框架中存在什么問題, 歡迎在下載評論區(qū)留言.