自定义注解Annocation
2016-04-06 13:19
351 查看
原理:获取到我们的注解,通过java反射调用为特定元素设置值
1、定义注解
@Target(ElementType.FIELD)//表示用在字段上
@Retention(RetentionPolicy.RUNTIME)// 表示是在声明周期运行的
RetentionPoicy的取值有:
1.SOURCE:在源文件中有效(即源文件保留)
2.CLASS:在class文件中有效(即class保留)
3.RUNTIME:在运行时有效(即运行时保留)
public @interface ViewId { //注解名字:VIewID
int value() default 0; //注解的属性名字:value,值类型 :int *当属性名为value时间,使用时可省略属性名,其他的不可以
}
2、注解的解释方法
public class ViewIdControler {
private Activity context;
public void regist(Activity context) {//为当前的Activity注册
this.context = context;
function();
}
// 解释注解
private void function() {
try {
Class<?> clazz = context.getClass(); //获得运行时类对象
Field[] fields = clazz.getDeclaredFields(); //获得申明的属性S
for (Field f : fields) {
// 判断是否带有ViewID的注解
if (f.isAnnotationPresent(ViewId.class)) {
ViewId viewId = f.getAnnotation(ViewId.class);// 获取注解
int id = viewId.value(); //通过属性名字,获取值
if (id > 0) {
f.setAccessible(true); //这个我也不太清楚
f.set(context, context.findViewById(id)); //设置值
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
3、使用自定义的注解
public class MainActivity extends Activity implements ViewIterface,
OnClickListener {
@ViewId(R.id.mima)
private EditText passWorld;
@ViewId(R.id.name)
private EditText name;
@ViewId(R.id.login)
private Button login;
private ProgressDialog dialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ViewIdControler controler = new ViewIdControler();
controler.regist(this);
initViews();
}
//如此就不用findviewById了
1、定义注解
@Target(ElementType.FIELD)//表示用在字段上
@Retention(RetentionPolicy.RUNTIME)// 表示是在声明周期运行的
RetentionPoicy的取值有:
1.SOURCE:在源文件中有效(即源文件保留)
2.CLASS:在class文件中有效(即class保留)
3.RUNTIME:在运行时有效(即运行时保留)
public @interface ViewId { //注解名字:VIewID
int value() default 0; //注解的属性名字:value,值类型 :int *当属性名为value时间,使用时可省略属性名,其他的不可以
}
2、注解的解释方法
public class ViewIdControler {
private Activity context;
public void regist(Activity context) {//为当前的Activity注册
this.context = context;
function();
}
// 解释注解
private void function() {
try {
Class<?> clazz = context.getClass(); //获得运行时类对象
Field[] fields = clazz.getDeclaredFields(); //获得申明的属性S
for (Field f : fields) {
// 判断是否带有ViewID的注解
if (f.isAnnotationPresent(ViewId.class)) {
ViewId viewId = f.getAnnotation(ViewId.class);// 获取注解
int id = viewId.value(); //通过属性名字,获取值
if (id > 0) {
f.setAccessible(true); //这个我也不太清楚
f.set(context, context.findViewById(id)); //设置值
}
}
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
3、使用自定义的注解
public class MainActivity extends Activity implements ViewIterface,
OnClickListener {
@ViewId(R.id.mima)
private EditText passWorld;
@ViewId(R.id.name)
private EditText name;
@ViewId(R.id.login)
private Button login;
private ProgressDialog dialog;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ViewIdControler controler = new ViewIdControler();
controler.regist(this);
initViews();
}
//如此就不用findviewById了
相关文章推荐
- 定制窗口标题
- #pragma once与#ifndef两种防止头文件二次编译的区别
- 1209:Catch That Cow(bfs)
- SVN状态详解
- 分别给出BOOL,int,float,指针变量 与“零值”比较的 if 语句(假设变量名为var)
- LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
- Erlang入门
- leetcode——7—— Reverse Integer可仿溢出
- Cocos2dx项目--动作类游戏内存优化--Spine结构分析
- h5-8 canvas
- XP系统如何设置关机自动清理垃圾?XP系统关机自动清理垃圾的设置方法
- js中json字符串对象互转的例子
- js中json字符串对象互转的例子
- js中json字符串对象互转的例子
- js中json字符串对象互转的例子
- js中json字符串对象互转的例子
- js中json字符串对象互转的例子
- js中json字符串对象互转的例子
- js中json字符串对象互转的例子
- js中json字符串对象互转的例子