問題描述 比較經(jīng)典的一個(gè)問題就是, 在個(gè)人中心判斷是否登錄這個(gè)問題了. 在個(gè)人中心點(diǎn)擊的時(shí)候, 很多按鈕需要判斷是否登錄. 于是這樣寫.
@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+注解的方式
每個(gè)重復(fù)的邏輯我還得跑去封裝一個(gè)注解, 好麻煩, 我比較懶, 不太喜歡這種方式.
解決辦法2: 用hook方式, 我已經(jīng)封裝成框架.
github地址: https://github.com/liys666666/DoubleClick
框架主要有兩個(gè)功能:
1.無入侵解決按鈕重復(fù)點(diǎn)擊
2.onClick重復(fù)邏輯統(tǒng)一處理 (本章內(nèi)容)
一. 框架引入
//項(xiàng)目根目錄下,build.gradle
allprojects {
repositories {
...
maven { url 'https://jitpack.io' } //添加
}
}
//app目錄下build.gradle
dependencies {
implementation 'com.github.liys666666:DoubleClick:V1.0.4' //添加
}
//初始化
ViewDoubleHelper.init(application); //點(diǎn)擊間隔時(shí)間. 默認(rèn)時(shí)間: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());
}
缺點(diǎn):
還是存在代碼入侵現(xiàn)象, 需要在具體的Activity寫代碼.
2.0版本解決這個(gè)問題, 完全不需要在Activity寫代碼.
2.0使用說明: http://www.itdecent.cn/p/df0ef3866cc1
到這里就結(jié)束了, 希望能幫到有需要的人, 如果覺得好用, 歡迎star.
技術(shù)有限, 如果框架中存在什么問題, 歡迎在下載評論區(qū)留言.