最近没啥事,前段时间看到一个框架是使用的注解来代替findViewById()的然后就研究了,发现还是蛮容易的,下面就是注解的代码:

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target; /**
* @author kchang
* @E-mail:kchang@163.com
*/
@Target(ElementType.FIELD)//属性
@Retention(RetentionPolicy.RUNTIME)//运行时执行
@Documented
public @interface InjectView {
public int value() default -1;
}

Activity代码:

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.TextView; public class MainActivity extends Activity {
@InjectView(R.id.tv)
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
InjectUtil.autoInjectView(this);
textView.setText("inject view test");
}

InjectUtil工具类的代码:

import java.lang.reflect.Field;

import android.app.Activity;

/**注入框架
* @author changkai
* @E-mail:changkai244@163.com
*/
public class InjectUtil {
/**
* 自动注入findViewById()
* @param activity
* 当前的activity
*/
public static void autoInjectView(Activity activity) {
Class<?> classAct = activity.getClass();
//获取所有的变量
Field[] fields = classAct.getDeclaredFields();
for (Field field : fields) {
if (field.isAnnotationPresent(InjectView.class)) {//判断是否为InjectView注解
InjectView injectView = field.getAnnotation(InjectView.class);//获取InjectView注解
int id = injectView.value();//获取注解的值
if (id > 0) {
field.setAccessible(true);//允许范围私有变量
try {
field.set(activity, activity.findViewById(id));//给当前的变量赋值
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
}
}

好的,就是这个简单。。。

Android_注解+反射代替findViewById()的更多相关文章

  1. Java学习:注解,反射,动态编译

    狂神声明 : 文章均为自己的学习笔记 , 转载一定注明出处 ; 编辑不易 , 防君子不防小人~共勉 ! Java学习:注解,反射,动态编译 Annotation 注解  什么是注解 ? Annotat ...

  2. 枚举类&&注解&&反射

    什么是枚举类? 枚举类是优化定义固定对象的一种特殊的类. 换句话说,在需要类的实例为一个或者多个并且相对固定的时候,使用枚举类.(枚举类可扩展) 类的实例相对来说固定的有日期,客观不变的一些数字等等. ...

  3. 通过自定义注解反射生成SQL语句

    ----------------------------------------Program.cs---------------------------------------- using Sys ...

  4. C# - 通过自定义注解反射生成SQL语句[转]

    转自http://blog.163.com/jong_cai/blog/static/87028045200902033553581/ -------------------------------- ...

  5. java ----> 注解/反射

    注解 一个例子,摘自Junit-4.12.jar源码. 1 @Retention(RetentionPolicy.RUNTIME) 2 @Target({java.lang.annotation.El ...

  6. 注解&反射

    什么是注解 Annotation是从JDK5.0开始引入的新技术 Annotation的作用: 不是程序本身,可以对程序作出解释.(这一点和注释(comment)没什么区别) > 可以被其他程序 ...

  7. 4、注解反射生成SQL语句

    .任务说明         ①有一张用户表,字段包括:用户ID.用户名.昵称.年龄.性别.所在城市.邮箱.手机号:         ②使用java注解来对用户表的每个字段或字段的组合条件进行动态生成S ...

  8. 关于多线程--网络编程 -- 注解反射的一点笔记(JAVA篇)

    一 . 线程 java开启一个线程的方法(三种) 方法一:继承Thread类并New一个线程对象 步骤: 1):定义一个类A继承于Java.lang.Thread类. class TestThread ...

  9. Android中通过注解代替findViewById方法

    转自:http://www.2cto.com/kf/201405/302998.html 这篇文章主要讲解注解实现findViewById的功能,首先我们来熟悉一下在java中怎么定义一个注解和解析一 ...

随机推荐

  1. Error running Tomcat8: Address localhost:xxxx is already in use

    参考自: https://blog.csdn.net/huazhongkejidaxuezpp/article/details/41813683 第一步,命令提示符号,执行命令:netstat -an ...

  2. Vmware unknow Interface ens33

    vmare打开虚拟网络编辑器,按图示操作

  3. 【转载】Sql Server参数化查询之where in和like实现详解

    文章导读 拼SQL实现where in查询 使用CHARINDEX或like实现where in 参数化 使用exec动态执行SQl实现where in 参数化 为每一个参数生成一个参数实现where ...

  4. python 函数进阶与闭包

    函数的命名空间和作用域 引言 现在有个问题,函数里面的变量,在函数外面能直接引用么? def func1(): m = 1 print(m) print(m) #这行报的错 报错了: NameErro ...

  5. POJ 3107.Godfather 树形dp

    Godfather Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 7536   Accepted: 2659 Descrip ...

  6. HDU 5521.Meeting 最短路模板题

    Meeting Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total ...

  7. IT资产管理—采购与合同管理功能

  8. ABP框架系列之三十七:(Navigation-导航)

    Every web application has some menu to navigate between pages/screens. ASP.NET Boilerplate provides ...

  9. (PMP)第8章-----项目质量管理

    过程质量管理,成果质量的管理 戴明理论:PDCA,戴明环 朱兰理论:质量规划,质量控制,质量改进,朱兰三部曲 克鲁斯比理论:零缺陷,质量免费 石川理论:质量圈,因果图,质量管理七大工具:核对表,帕累托 ...

  10. springboot 使用maven 打包 报 (请使用 -source 7 或更高版本以启用 diamond 运算符) 错误解决办法

    在使用springboot maven 打包时 报如下错误 (请使用 -source 7 或更高版本以启用 diamond 运算符) pom.xml编译插件 配置如下: <plugin> ...