您的位置:首页 > 其它

用反射和注解,绑定控件的id和点击事件

2016-05-16 10:34 531 查看
最近才开始接触反射和注解的内容,根据项目的中例子,做了一个demo,用于帮定控件的id和点击事件!感谢公司的技术总监的指导!

1.首先要先自定义两个注解,一个是绑定id的,一个是点击事件的

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* id 的绑定点击事件
* @author ljg
*
*/
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
public @interface Onclick {
//获取需要 设置点击事件的id
int [] id () default {};
}


/**
* 绑定id 注解
* @author ljg
*
*/
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface FindviewByid {
//绑定id
int id () default 0;

}


2:最主要的一步就是,怎么用注解进行工作的

/**
* 通过注解判断 是否已经标注的管理类
*
* @author ljg
*
*/
public class _InfaceManger {

/**
* 绑定 活动的id
*
* @param az
*/
public static void findViewId(Activity az) {

Class clazz = az.getClass();
// 获取activity中的所有字段
Field[] fields = clazz.getDeclaredFields();
for (Field ff : fields) {
// 字段中是否已经被标注
if (ff.isAnnotationPresent(FindviewByid.class)) {
// 拿到被标注的字段的注解对象
FindviewByid fid = ff.getAnnotation(FindviewByid.class);
// 拿到字段标注的id
int id = fid.id();
// 非默认值
if (id > 0) {
// 通过反射拿私有对象,徐加上这一句
ff.setAccessible(true);
try {
View view = az.findViewById(id);
//将指定对象变量上此 Field 对象表示的字段设置为指定的新值。
ff.set(az, view);
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}

}

}
3 ,这事要是说通的一点也不难,这最后一步就是用了





如上图所示,就是这样,把所有需要进行点击的控件id都列出来,然后,每个控件之上,给予他自己的id。

4:这是最简单,也是最重要的一步

在初始化的时候



上边这两行代码,如果不写的话,没有一点用。

就是这么简单,完全可以运用到自己的项目中,不用没都去findviewById了,也算属于一个懒人的方法吧!

demo下载

http://download.csdn.net/detail/jiajia1112223/9521311

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: