对于注解这个概念刚开始不是很理解,翻阅了其他人博客,参考实现的例子开始理解与运用。以前刚开始的写android项目时,一般找定义控件并初始化控件都是调用findviewbyId,然而当一个布局页面(类似提交表单页面)下控件特别多时代码就会显得臃肿,也不方便后续维护 。后面,别人推荐下去用xutils框架发现提供注解去绑定控件,我感觉对于注解直观来看他把声明与绑定控件合在一起,代码清晰好多。有没有?

     @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();
}
}
}
}

最新文章

  1. C# ini文件操作【源码下载】
  2. express-session使用理解
  3. JS数组定义及详解
  4. C#线程同步手动重置事件——ManualResetEvent
  5. [.net 面向对象编程基础] (20) LINQ使用
  6. 【转】牛人整理分享的面试知识:操作系统、计算机网络、设计模式、Linux编程,数据结构总结
  7. 【PHP设计模式 05_DanLi.php】单例模式
  8. Jquery获得控件值的方法
  9. Android 开发中使用 SQLite 数据库
  10. 转:Yelp开发团队发布内部网站设计指南
  11. windows phone因为墓碑化导致“正在恢复”的分析
  12. 基本event封装:阻止冒泡、默认事件等
  13. 【java提高】---HashMap解析(一)
  14. plugins/python/uwsgi_python.h:2:20: fatal error: Python.h: No such file or directory
  15. Struts2学习笔记NO.1------结合Hibernate完成查询商品类别简单案例(工具IDEA)
  16. Python(Django)项目与Apache的管理
  17. python之三元表达式、列表推导式、生成器表达式、递归、匿名函数、内置函数
  18. 【Zookeeper系列】ZooKeeper伸缩性(转)
  19. Python文件读写(open(),close(),with open() as f...)
  20. Mysql 用户权限管理

热门文章

  1. ue4访问php接口
  2. webstorm快捷键说明
  3. Android.mk文件详解(转)
  4. iOS开发 调用系统相机和相册 分类: ios技术 2015-03-30 15:52 65人阅读 评论(0) 收藏
  5. Splay初步【bzoj1503】
  6. 微信小程序之----navigator页面跳转
  7. Zend Framework Module之多模块配置
  8. PHP根据设备类型自动跳转相应网址页面,这个现在实用
  9. java_web学习(15)jQuery
  10. Assembly