对于注解这个概念刚开始不是很理解,翻阅了其他人博客,参考实现的例子开始理解与运用。以前刚开始的写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();
}
}
}
}

Android注解学习(1)的更多相关文章

  1. Android注解学习(2)

    最近考试周没什么时间写,回归正题.前面的一次简单的讲了关于注解的的基础部分,这一次分析xutils注解封装的源码(奉上github源码). 补充下:xUtils 2.x对Android 6.0兼容不是 ...

  2. Android注解使用之通过annotationProcessor注解生成代码实现自己的ButterKnife框架

    前言: Annotation注解在Android的开发中的使用越来越普遍,例如EventBus.ButterKnife.Dagger2等,之前使用注解的时候需要利用反射机制势必影响到运行效率及性能,直 ...

  3. Android注解使用之使用Support Annotations注解优化代码

    前言: 前面学习总结了Java注解的使用,博客地址详见Java学习之注解Annotation实现原理,从本质上了解到什么注解,以及注解怎么使用?不要看见使用注解就想到反射会影响性能之类,今天我们就来学 ...

  4. Android:学习AIDL,这一篇文章就够了(下)

    前言 上一篇博文介绍了关于AIDL是什么,为什么我们需要AIDL,AIDL的语法以及如何使用AIDL等方面的知识,这一篇博文将顺着上一篇的思路往下走,接着介绍关于AIDL的一些更加深入的知识.强烈建议 ...

  5. android注解入门 并来自己写一个框架

    介绍 这里我带大家来学习一下注解 并且用来写下一个模仿xUtils3 中View框架 此框架 可以省略activity或者fragment的 findViewById 或者设置点击事件的烦恼 我正参加 ...

  6. 开发自己的山寨Android注解框架

    目录 开发自己的山寨Android注解框架 开发自己的山寨Android注解框架 参考 Github黄油刀 Overview 在上一章我们学习了Java的注解(Annotation),但是我想大家可能 ...

  7. (转载)Android:学习AIDL,这一篇文章就够了(下)

    前言 上一篇博文介绍了关于AIDL是什么,为什么我们需要AIDL,AIDL的语法以及如何使用AIDL等方面的知识,这一篇博文将顺着上一篇的思路往下走,接着介绍关于AIDL的一些更加深入的知识.强烈建议 ...

  8. Android开发学习之路-RecyclerView滑动删除和拖动排序

    Android开发学习之路-RecyclerView使用初探 Android开发学习之路-RecyclerView的Item自定义动画及DefaultItemAnimator源码分析 Android开 ...

  9. Android开发学习路线图

    Android开发学习方法: Android是一个比较庞大的体系,从底层的Linux内核到上层的应用层,各部分的内容跨度也比较大.因此,一个好的学习方法对我们学习Android开发很重要. 在此建议, ...

随机推荐

  1. IOS 清除UIWebview的缓存以及cookie

    cookie清除              NSHTTPCookie *cookie;            NSHTTPCookieStorage *storage = [NSHTTPCookieS ...

  2. HTML学习(四)样式

    通过使用 HTML4.0,所有的格式化代码均可移出 HTML 文档,然后移入一个独立的样式表. 实例:例1:本例演示如何使用添加到 <head> 部分的样式信息对 HTML 进行格式化.& ...

  3. HTML学习一(入门了解)

    基础部分---------------------------------一:简介HTML 是用来描述网页的一种语言.HTML 指的是超文本标记语言 (Hyper Text Markup Langua ...

  4. Android 中内容提供者的使用

    在Android中内容提供者主要是用于不同程序之间的数据共享.内容提供器的用法一般有两种,一种是使用现有的内容提供器来读取和操作相应程序的数据,另一种是创建自己的内容提供器,供其他的程序访问. 使用现 ...

  5. Android应用运行过程(转)

    源:Android应用运行过程 首先,ActivityThread从main()函数开始执行,调用prepareMainLooper()为UI线程创建一个消息队列(MessageQueue). 然后创 ...

  6. Delphi+GDI

    源:Delphi 初试GDI+学习笔记 Delphi 深入GDI+学习笔记

  7. VB.NET中网络编程所需组件WinHTTP的添加

    VB.NET中网络编程所需组件: WinHTTP组件:项目-->添加引用-->COM选项卡-->Microsoft WinHTTP Services,version 5.1--> ...

  8. Java 之 反射

    1.反射 a.意义:允许运行中的Java程序对自身进行检查,或者说"自审",并能直接操作程序的内部属性 b.概括:运行时探究和使用编译时未知的类 c.反射的核心原理: ①JVM在加 ...

  9. beamer中插入c代码,python代码的经验

    下面是插入的scala代码,它与python在某些语法上类似,所在在https://github.com/olivierverdier/python-latex-highlighting下载了一个py ...

  10. Java虚拟机——进度1

    Java 虚拟机       一.Java虚拟机的基本结构 ①类加载子系统:从文件系统或者网络中加载Class信息,存放在方法区中. ②方法区中存放放进来的Class信息,也包括一些运行时常量池信息包 ...