Android开发Android开发经验谈android基础知识

Android onClick重复逻辑统一处理---onClic

2019-08-22  本文已影响21人  liys_android

问题描述 比较经典的一个问题就是, 在个人中心判断是否登录这个问题了. 在个人中心点击的时候, 很多按钮需要判断是否登录. 于是这样写.

    @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.

技术有限, 如果框架中存在什么问题, 欢迎在下载评论区留言.

上一篇 下一篇

猜你喜欢

热点阅读