Android注解学习(1)
对于注解这个概念刚开始不是很理解,翻阅了其他人博客,参考实现的例子开始理解与运用。以前刚开始的写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)的更多相关文章
- Android注解学习(2)
最近考试周没什么时间写,回归正题.前面的一次简单的讲了关于注解的的基础部分,这一次分析xutils注解封装的源码(奉上github源码). 补充下:xUtils 2.x对Android 6.0兼容不是 ...
- Android注解使用之通过annotationProcessor注解生成代码实现自己的ButterKnife框架
前言: Annotation注解在Android的开发中的使用越来越普遍,例如EventBus.ButterKnife.Dagger2等,之前使用注解的时候需要利用反射机制势必影响到运行效率及性能,直 ...
- Android注解使用之使用Support Annotations注解优化代码
前言: 前面学习总结了Java注解的使用,博客地址详见Java学习之注解Annotation实现原理,从本质上了解到什么注解,以及注解怎么使用?不要看见使用注解就想到反射会影响性能之类,今天我们就来学 ...
- Android:学习AIDL,这一篇文章就够了(下)
前言 上一篇博文介绍了关于AIDL是什么,为什么我们需要AIDL,AIDL的语法以及如何使用AIDL等方面的知识,这一篇博文将顺着上一篇的思路往下走,接着介绍关于AIDL的一些更加深入的知识.强烈建议 ...
- android注解入门 并来自己写一个框架
介绍 这里我带大家来学习一下注解 并且用来写下一个模仿xUtils3 中View框架 此框架 可以省略activity或者fragment的 findViewById 或者设置点击事件的烦恼 我正参加 ...
- 开发自己的山寨Android注解框架
目录 开发自己的山寨Android注解框架 开发自己的山寨Android注解框架 参考 Github黄油刀 Overview 在上一章我们学习了Java的注解(Annotation),但是我想大家可能 ...
- (转载)Android:学习AIDL,这一篇文章就够了(下)
前言 上一篇博文介绍了关于AIDL是什么,为什么我们需要AIDL,AIDL的语法以及如何使用AIDL等方面的知识,这一篇博文将顺着上一篇的思路往下走,接着介绍关于AIDL的一些更加深入的知识.强烈建议 ...
- Android开发学习之路-RecyclerView滑动删除和拖动排序
Android开发学习之路-RecyclerView使用初探 Android开发学习之路-RecyclerView的Item自定义动画及DefaultItemAnimator源码分析 Android开 ...
- Android开发学习路线图
Android开发学习方法: Android是一个比较庞大的体系,从底层的Linux内核到上层的应用层,各部分的内容跨度也比较大.因此,一个好的学习方法对我们学习Android开发很重要. 在此建议, ...
随机推荐
- object - c 在URL中截取特定参数的值
#pragma mark - 获取url特定的参数 -(NSString *) jiexi:(NSString *)CS webaddress:(NSString *)webaddress { NSE ...
- MIPI-2
Mipi针对显示有一整套解决方案,首先,框图如下 可以看到,很像OSI七层参考模型,分为 应用层:像素处理以及像素包管理,处理一些比较高的协议, 协议层底层:用于对打包好的像素数据进行二次打包,包括对 ...
- iOS开发网络数据之AFNetworking使用 分类: ios技术 2015-04-03 16:35 105人阅读 评论(0) 收藏
http网络库是集XML解析,Json解析,网络图片下载,plist解析,数据流请求操作,上传,下载,缓存等网络众多功能于一身的强大的类库.最新版本支持session,xctool单元测试.网络获取数 ...
- win7下wamp扩展memcache
1.服务端安装 1.1 下载地址 http://download.csdn.net/detail/feiyuhit/5873533#comment 1.2 安装 将下载的压缩文件夹的memcached ...
- sql语句的截取字符串下标是从1开始
这里的指的sqliter数据库 substr函数 substr(date,1,10)
- UVa 357 - Let Me Count The Ways
题目大意:也是硬币兑换问题,与147.674用同样的方法即可解决. #include <cstdio> #include <cstring> #define MAXN 3000 ...
- 安卓selector
定义styles.xml <?xml version="1.0" encoding="utf-8"?> <resources> < ...
- [Angular Tutorial] 5-Filtering Repeaters
在上一步中,我们花了很大功夫来布局应用的基础,所以我们现在做点简单点的吧!我们将会添加一个全文本搜索框(没错,这很简单). ·我们的应用现在会有一个搜索框,注意页面中手机列表的改变取决于用户在搜索框键 ...
- dev使用3
http://www.cnblogs.com/yuerdongni/archive/2012/09/08/2676748.html http://www.cnblogs.com/yuerdongni/ ...
- Java-Swing编程之对话框案例详解
package com.xushouwei.cn.photo; import java.awt.GraphicsConfiguration; import java.awt.GridLayout; i ...