最近没啥事,前段时间看到一个框架是使用的注解来代替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;@Overrideprotected 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();}}}}}
}

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

转载于:https://www.cnblogs.com/changkai244/p/4117985.html

Android_注解+反射代替findViewById()相关推荐

  1. java学习~线程、注解反射、Swagger

    这几天一直在学习java基础,所以跟着老师一起学习做的总结. 项目地址:StudyJava项目地址 一:线程学习 这是代码的布局以及对各个类的描述和总结.可以借鉴. 线程代码地址:thread No1 ...

  2. Java 枚举注解反射

    4-9 枚举&注解&反射 枚举 引入的目的:用于定义有限数量的一组同类常量,限定了使用者在使用时常量的取值范围. Java中枚举的演变: java1.5前使用类+final修饰变量+私 ...

  3. 使用注解+反射实现List与树形结构的相互转换

    应用场景: 提示:此种写法只适用于数据量小的转换,数据量大时请移步另一个方案 [一次循环实现List转树形结构(不使用递归)](https://blog.csdn.net/weixin_3730496 ...

  4. 利用注解 + 反射消除重复代码(Java项目)

    作者 | Leilei Chen 来源 | https://llchen60.com/ 1. 案例场景 假设银行提供了一些 API 接口,对参数的序列化有点特殊,不使用 JSON,而是需要我们把参数依 ...

  5. Java_注解 反射 字节码 类加载机制

    一.注解  1. 二.反射  1.动态语言:python.js    程序运行时,可以改变程序结构或变量类型. java的动态性:利用反射机制.字节码操作获得类似动态语言的特性. 2.反射机制 ref ...

  6. 利用注解 + 反射消除重复代码,妙!

    1.1 案例场景 假设银行提供了一些 API 接口,对参数的序列化有点特殊,不使用 JSON,而是需要我们把参数依次拼在一起构成一个大字符串: 1)按照银行提供的API文档顺序,将所有的参数构成定长的 ...

  7. java 重复代码优化_利用注解 + 反射消除重复代码(Java项目)

    1. 案例分析 1.1 案例场景 假设银行提供了一些 API 接口,对参数的序列化有点特殊,不使用 JSON,而是需要我们把参数依次拼在一起构成一个大字符串 按照银行提供的API文档顺序,将所有的参数 ...

  8. 枚举注解反射整合详解

    一丶枚举 1 ** 2 * 一.枚举类的使用 3 * 1.枚举类的理解:类的对象只有有限个,确定的.我们称此类为枚举类 4 * 2.当需要定义一组常量时,强烈建议使用枚举类 5 * 3.如果枚举类中只 ...

  9. JAVA基础,注解反射机制

    文章目录 注解 (非常重要) 什么是注解 基本注解 @Override @Deprecated @SuppressWarnings @SafeVarargs @FunctionalInterface ...

最新文章

  1. ClassLoader引发的类型转换异常(转载)
  2. 使用指定的Action,Category调用系统Activity
  3. MongoDB常用命令示例
  4. 剑指OFFER之二进制中1的个数(九度OJ1513)
  5. tron区块链php对接,Tron区块链技术 - Tron智能合约概述
  6. 使用 jQuery Mobile 与 HTML5 开发 Web App (十一) —— jQuery Mobile 事件详解
  7. Android 驱动(17)---如何在linux中添加新的kernel module
  8. 快速排序-超级详细代码注释!
  9. 通过libxml2的xpath解析xml
  10. 美化导航html,HTML-美化
  11. 中南大学计算机学院复试差额录取比例,中南大学在职研究生复试差额比例大概是多少...
  12. html酷炫电子时钟效果,纯js实现电子时钟特效
  13. 华为——策略路由(校园网配置)
  14. 联想Y50耳机插入耳机孔后没有声音解决办法
  15. 用Java编写约分最简公式_一个有趣的算法问题:如何定义一个分数类
  16. 基于超声波的库位重定位算法
  17. oem persist sysinfo三个分区的作用是什么?
  18. 破解版的cornerstore(mac版)
  19. 哪些游戏称得上“次时代”? 次时代游戏史
  20. 企业数字化转型“核心方法论”

热门文章

  1. JavaScript 开发进阶:理解 JavaScript 作用域和作用域链(上)
  2. linq学习笔记(2):DataContext
  3. 我的一次尴尬的维护经历
  4. python 发邮件-带附件-文本-html
  5. oracle恢复误删除记录
  6. ie关闭浏览器tab提示信息
  7. Gluster 常用命令
  8. 数据结构读书笔记---------第一章 绪论
  9. IOS学习之路--OC的基础知识
  10. 网站用户体验的76个体验点