Android注解学习(1)
2015-12-20 17:23
387 查看
对于注解这个概念刚开始不是很理解,翻阅了其他人博客,参考实现的例子开始理解与运用。以前刚开始的写android项目时,一般找定义控件并初始化控件都是调用findviewbyId,然而当一个布局页面(类似提交表单页面)下控件特别多时代码就会显得臃肿,也不方便后续维护 。后面,别人推荐下去用xutils框架发现提供注解去绑定控件,我感觉对于注解直观来看他把声明与绑定控件合在一起,代码清晰好多。有没有?
下面重点需要了解注解使用的概念与语法
android api 官网描述的可以看到它是属于java.lang包下并三块内容来描述分别为元注解,接口,枚举;
下面主要介绍元注解:
1.Annotations--元注解
1)Documented--定义一个用于表示一个注释的元注解,并被认为是公共接口的一部分。Documented是一个标记注解,没有成员。
2)Inherited--定义一个用于表示注释自动继承的元注解。
3)Retention--定义用于确定注释的保留范围的元注解。(即:被描述的注解在什么范围内有效)
4)Target--定义确定什么ElementType注释可用于元注解。(即:被描述的注解可以用在什么地方)
可以参考(深入理解Java:注解(Annotation)自定义注解入门)
2.用法看下面如下:
@ViewInject(id = R.id.lv_test1) private ListView lv_test1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); }
下面重点需要了解注解使用的概念与语法
android api 官网描述的可以看到它是属于java.lang包下并三块内容来描述分别为元注解,接口,枚举;
下面主要介绍元注解:
1.Annotations--元注解
1)Documented--定义一个用于表示一个注释的元注解,并被认为是公共接口的一部分。Documented是一个标记注解,没有成员。
2)Inherited--定义一个用于表示注释自动继承的元注解。
3)Retention--定义用于确定注释的保留范围的元注解。(即:被描述的注解在什么范围内有效)
4)Target--定义确定什么ElementType注释可用于元注解。(即:被描述的注解可以用在什么地方)
可以参考(深入理解Java:注解(Annotation)自定义注解入门)
2.用法看下面如下:
import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target(ElementType.FIELD) @Retention(RetentionPolicy.RUNTIME) public @interface ViewInject { public int id(); }
@Target(ElementType.FIELD)--指该注解用于字段 @Retention(RetentionPolicy.RUNTIME)--指作用在运行时 定义注解格式: public @interface 注解名 {定义体} 那如何将自定义的注解与控件绑定在一起?
/** * 初始化findviewbyid注解 */ public void initView(Object windowobj) { //获取windowobj对象所在类声明的字段 Field[] fields = windowobj.getClass().getDeclaredFields(); if (fields != null && fields.length > 0) { for (Field field : fields) { try { //并不是将方法的访问权限改成了public,而是取消java的权限控制检查 field.setAccessible(true); if (field.get(this) != null) continue; //获取有ViewInject字段的注解对象 ViewInject viewInject = field .getAnnotation(ViewInject.class);// if (viewInject != null) { int viewId = viewInject.id(); //将该字段与控件进行绑定 field.set(this, findViewById(viewId)); } } catch (Exception e) { e.printStackTrace(); } } } }
相关文章推荐
- android4大组件之Activity
- 【J】Android-Widget桌面小组件
- 【菜鸟篇】初入Android,下载问题整理
- 【Java CV与Android】在Android工程里配置JavaCV
- android-Advanced NFC
- Android招財进宝手势password的实现
- Android读书笔记之对话框的使用
- Android中fragment实现按钮点击事件
- Android 放大镜效果实现原理
- Android中防止Toast重复显示的问题
- 本文介绍Android中Intent的各种常见作用
- AndroidStudio快捷键
- android-Notification点击跳转Activity
- 【android】Cursor记录集游标、ListView和SimpleCursorAdapter、ListView数据动态更新
- Android笔记(8)---Fragment的使用(静态加载,动态加载)
- android 计数器---定时执行任务
- Android中TouchEvent触摸事件机制
- Android自动电话录音开发过程及问题
- Android SurfaceView使用dirty rect刷新
- Android Studio 错误 Duplicate files copied in APK META-INF/LICENSE.txt