android ViewId自动注解使用详解(ViewInject)
来源:互联网 发布:php中文变量 编辑:程序博客网 时间:2024/06/08 21:58
Annotation就是注解了,JDK1.5新增加功能,该功能可用于类,构造方法,成员变量,方法,参数等的声明中。
api版本23下,android studio里是直接可以使用的,不用添加依赖库,以前的api可能需要。下边介绍几种我觉得比较好用的注解。
NoNull注解
先看下源码@Documented@Retention(CLASS)@Target({METHOD, PARAMETER, FIELD})public @interface NonNull {}
@Retention(CLASS)指@NoNull编译到类文件里
@Target({METHOD, PARAMETER, FIELD})指应用于方法,参数和成员变量
再看具体使用
其中局部变量b 设置@NonNull是报错的因为源码指明并不能应用于局部变量
@NonNull void testNonNull(@NonNull String a){ @NonNull String b; } @NonNull String c;CallSuper注解
首先还是先看源码
@Documented@Retention(CLASS)@Target({METHOD})public @interface CallSuper {}标签说明: 编译时生效,应用于方法。下边一起看下源码说明/** * Denotes that any overriding methods should invoke this method as well. * <p> * Example: * <pre><code> * @CallSuper * public abstract void onFocusLost(); * </code></pre> */意指所有重写方法都需要调用super.method();
ViewId注解
看了一圈发现google并没有提供替换findViewById的注解方法,这里再介绍一下如何自定义注解方法。
首先效仿源码,创建注解类@Target(ElementType.FIELD)//表示用在成员变量@Retention(RetentionPolicy.RUNTIME)//表示在生命周期是运行时生效public @interface ViewInject { int value() default -1;//需要提供字段获取id值}核心逻辑就是定义注解接口,在特定时间,特定情况下执行我们预先写好的注解方法,已到达我们想要的效果。
注解执行方法/** * 解析注解 */ public void autoInjectAllField() { try { Class<?> clazz = this.getClass(); Field[] fields = clazz.getDeclaredFields();//获得Activity中声明的字段 for (Field field : fields) { // 查看这个字段是否有我们自定义的注解类标志的 if (field.isAnnotationPresent(ViewInject.class)) { ViewInject inject = field.getAnnotation(ViewInject.class); int id = inject.value(); if (id > 0) { field.setAccessible(true); field.set(this, this.findViewById(id));//给我们要找的字段设置值 } } } } catch (IllegalAccessException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } }调用此方法时,要先初始化xml文件。所以在界面Activity中,必须在setContentView()执行后,才能调用父类的注解方法autoInjectAllField()
@ViewInject(value=R.id.weightSum) Button a; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); autoInjectAllField(); a.setText("成功"); }
1 0
- android ViewId自动注解使用详解(ViewInject)
- android viewinject 反射 注解 IOC
- Android注解IOC框架【ViewInject】(一)
- Android 设置viewId
- Android中怎样用@ViewInject注解来彻底放弃findViewByid,gogoog0!!!
- Android快速开发框架之xUtils---注解模块 ---- ViewInject
- Android IOC 框架ViewInject(上)
- android注解使用详解(图文)
- android注解使用详解(图文)
- Android 通过 annotation ViewInject
- Android 通过 annotation ViewInject
- Android中通过注解代替findViewById方法 Android 中的 IOC 框架 【ViewInject】
- xUtils系列之ViewUtils-ViewInject注解
- IOC开发框架[@ViewInject] 注解式发开
- 注解+反射实现ViewInject的功能
- Android 中的 IOC 框架 【ViewInject】
- Android 中的 IOC 框架 【ViewInject】
- (自动注解)Android ButterKnife Zelezny插件的安装与使用
- Android setAlpha使用时导致其他界面变透明解决方案
- 数据库高并发解决方法总结
- consul ACL配置使用
- Makefile:内嵌函数用法
- spring cloud中使用Ribbon实现客户端的软负载均衡
- android ViewId自动注解使用详解(ViewInject)
- linux下查看文件内容工具发布啦!
- 数据统计1(各种统计图形)
- 多设备管理项目和Git的使用
- Qt QThread多线程模版
- SQL查询和判断语句
- 3.串口操作—基于CT117E开发板的STM32库函数编程
- 进程终止方法
- 丙申年年终总结