Android——实现点击校验登陆跳转屏蔽多次点击(非侵入式零改动)

本文介绍了如何在Android应用中通过反射和注解实现点击事件的拦截,以校验用户登录状态并防止多次点击跳转。这种方法避免了修改原有代码,提供了一种优雅的解决方案,同时讨论了性能影响和使用第三方库的兼容性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简论

每个APP几乎都会有个登陆功能,也自然需要某些按钮点击后验证是否登陆,没有登陆则跳转登陆界面, 较为庞大的项目可能每个模块之间的跳转都不同,我们传统的写法就是实现不同的OnClickListener类,然后将其实例set进去,又或者在BaseActivity中扩展其他方法,功能上是没问题,不过这样的写法让人有点头疼, 同界面可能这个需要验证那个不需要验证那么就需要两套方式来解决,后期改动对于公司新人也不是很友好。所以,可以整个类似拦截器一样的东西, 在保证原始写法的同时,使用某些方法,或者注解的形式标注是否需要验证, 这种效果笔者感觉还是比较理想。

反射

要说到拦截原生点击事件, 第一个想法就是用到反射了

public void setOnClickListener(@Nullable OnClickListener l) {
        if (!isClickable()) {
            setClickable(true);
        }
        getListenerInfo().mOnClickListener = l;
    }

View的点击触摸等手势事件都会被存放在一个ListenerInfo对象中,于是我们可以通过反射获取ListenerInfo对象然后再次反射获取到OnClickListener,然后重新为这个View设置一个点击事件, 这个点击事件的执行为先判断是否登陆,没有登陆去登陆,否则执行获取到的OnClickListener,就是这么简单

   Object info = ReflectUtils.reflect(v).field("mListenerInfo").get();
        final View.OnClickListener oriClick = ReflectUtils.reflect(info).field("mOnClickListener").get();
        v.setOnClickListener(n
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值