问题描述 比较经典的一个问题就是, 在个人中心判断是否登录这个问题了. 在个人中心点击的时候, 很多按钮需要判断是否登录. 于是这样写.
@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方式, 我已经封装成框架.
github地址: https://github.com/liys666666/DoubleClick
框架主要有两个功能:
1.无入侵解决按钮重复点击
2.onClick重复逻辑统一处理 (本章内容)
一. 框架引入
//项目根目录下,build.gradle
allprojects {
repositories {
...
maven { url 'https://jitpack.io' } //添加
}
}
//app目录下build.gradle
dependencies {
implementation 'com.github.liys666666:DoubleClick:V1.0.1' //添加
}
//初始化
ViewDoubleHelper.init(application); //点击间隔时间. 默认时间:1秒
二. 使用方法:
① 自定义需要处理逻辑的类, 继承BaseCustomClickListener.
例如: 登录处理.
public class LoginClickListener extends BaseCustomClickListener {
public static boolean isLogin = false;
@Override
public boolean isNext(View v) {
//判断登录逻辑 (onClick前执行)
return isLogin; //true继续执行onClick, false不再执行
}
@Override
public void after(View view) {
//onClick后 执行
}
}
②Activity中
//统一处理
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());
}
到这里就结束了, 希望能帮到有需要的人, 如果觉得好用, 欢迎Start.
技术有限, 如果框架中存在什么问题, 欢迎在下载评论区留言.
网友评论