文章目录
总结
一、Android 事件设置三要素
二、修饰注解的注解
三、Android 事件依赖注入步骤
总结
Android 依赖注入的核心就是通过反射获取 类 / 方法 / 字段 上的注解 , 以及注解属性 ; 在 Activity 基类中 , 获取该注解 以及 注解属性 , 进行相关操作 ;
一、Android 事件设置三要素
根据以下设置组件点击事件的代码 , 分析事件注入的要素 :
textView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { } });
点击事件 : 设置点击事件 , 需要调用 View.setOnClickListener 方法进行设置 ;
监听器类型 : 设置监听器类型 , 一般是 View.OnClickListener ;
事件触发回调方法 : 事件触发后的回调方法 , 原型为 public void onClick(View v) ;
为了兼容各种事件注入 , 如长按事件 , 上述事件设置三要素分别是
点击事件 : View.setOnLongClickListener 监听器类型 : View.OnLongClickListener 事件触发回调方法 : public boolean onLongClick(View v) textView.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { return false; }
如果要兼容各种不同的事件 , 就需要定义不同的注解 , 这里引入一个修饰注解的注解 , 为不同的时间注入注解进行配置 ;
二、修饰注解的注解
在 Java Web 开发中 , 经常使用注解进行相关配置 , 如 Spring ;
配置 EventBase 注解 , 用于修改事件注入的注解 , 点击事件与长按事件 , 都要使用下面的 EventBase 注解进行修饰 , 只是事件设置 3 33 要素设置不同 ;
package kim.hsl.ioc_lib; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * 自定义注解 * 用于注解上的注解 * 用于依赖注入视图 */ @Target(ElementType.ANNOTATION_TYPE) // 该注解作用于注解上 @Retention(RetentionPolicy.RUNTIME) // 注解保留到运行时 public @interface EventBase { /** * 设置事件监听的方法 * @return */ String listenerSetter(); /** * 设置监听器类型 * @return */ Class<?> listenerType(); /** * 事件触发后的回调方法 * @return */ String callbackMethod(); }
使用上述注解修饰 OnClick 注解 :
package kim.hsl.ioc_lib; import android.view.View; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; /** * 自定义注解 * 用于依赖注入视图 */ @Target(ElementType.METHOD) // 该注解作用于方法上 @Retention(RetentionPolicy.RUNTIME) // 注解保留到运行时 @EventBase( listenerSetter = "setOnClickListener", listenerType = View.OnClickListener.class, callbackMethod = "onClick") public @interface OnClick { int[] value(); // 接收 int 类型数组 }
三、Android 事件依赖注入步骤
Android 事件依赖注入步骤 :
① 声明注解 : 声明视图注入注解 OnClick ;
② 声明修饰注解的注解 : 声明修饰注解的注解 EventBase , 用于配置事件 3 33 要素 ;
② 客户端 Activity : 定义 MainActivity , 继承 BaseActivity , 在方法上使用 @OnClick 注解注入视图点击事件 ;
③ IOC 库中的 Activity 父类 : 定义 BaseActivity , 在 BaseActivity 中的 onCreate 方法中 , 处理依赖注入相关逻辑 ;
④ 依赖注入逻辑 : 获取 Activity 类 , 并使用反射获取类中的所有属性字段 , 获取所有的 @OnClick 和 @EventBase注解 , 如果找到该注解 , 执行 setOnClickListener 设置视图组件对象的点击方法 ;