Android通过注解初始化View
来源:互联网 发布:舆情监控软件多少钱 编辑:程序博客网 时间:2024/09/21 06:16
一、引言
Android中通过findViewById在布局文件中找到需要的View,加入一个Activity里面有许多的View需要初始化,那将是一件很繁琐的事情。当然Google一下你会发现有很多Android Annotations框架。比如比较有名的“Android Annotations”,这样的框架很复杂,用起来也比较麻烦,还有一些BUG,第一次使用也花费了不少时间研究。也许你在项目中只希望用到 Inject View这个功能,又或者你想知道这个实现的原理是怎样的。本文主要是解决这两个问题,实现一个最简单的ViewInject.
二、原理
原理是在Activity加载好后通过找到Activity中使用注解的字段,再通过Java反射的方式,动态的给这个字段设置值。
1、首先你需要了解一下Java的注解是如何工作的,如果你不了解可以先看一下相关的资料,这个比较简答。首先定义我们的注解类:
- /**
- * view inect by id
- *
- * @author Lucky
- *
- */
- @Target(ElementType.FIELD)//表示用在字段上
- @Retention(RetentionPolicy.RUNTIME)//表示在生命周期是运行时
- public @interface ViewInject {
- int value() default 0;
- }
2、我们需要定义个BaseActivity,在这个类中来解析注解
- /**
- *
- * @author Lucky
- *
- */
- public abstract class BaseActivity extends FragmentActivity {
- /**
- * get content view layout id
- *
- * @return
- */
- public abstract int getLayoutId();
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(getLayoutId());
- autoInjectAllField();
- }
- /**
- * 解析注解
- */
- public void autoInjectAllField() {
- try {
- Class<?> clazz = this.getClass();
- Field[] fields = clazz.getDeclaredFields();//获得Activity中声明的字段
- for (Field field : fields) {
- // 查看这个字段是否有我们自定义的注解类标志的
- if (field.isAnnotationPresent(ViewInject.class)) {
- ViewInject inject = field.getAnnotation(ViewInject.class);
- int id = inject.value();
- if (id > 0) {
- field.setAccessible(true);
- field.set(this, this.findViewById(id));//给我们要找的字段设置值
- }
- }
- }
- } catch (IllegalAccessException e) {
- e.printStackTrace();
- } catch (IllegalArgumentException e) {
- e.printStackTrace();
- }
- }
- }
3、完成上面的步骤后就是如何去使用了,示例代码如下:
- public class TestActivity extends BaseActivity {
- @ViewInject(R.id.claim_statement)
- private WebView mWebView;
- @Override
- public int getLayoutId() {
- // TODO Auto-generated method stub
- return R.layout.activity_claim;
- }
- }
这样就可以了。几行代码可以大大的提高工作效率。
三、参考资料
1、http://www.2cto.com/kf/201405/302998.html
0 0
- Android通过注解初始化View
- Android通过注解初始化View
- Android通过注解初始化View
- Android通过注解初始化View
- Android通过注解初始化View
- Android通过注解初始化View
- Android通过注解初始化绑定View
- 通过注解初始化绑定View
- android注解初始化view
- Android 通过Annotation(注解方式)实现IOC,设置点击事件,初始化View
- Android通过注解来初始化控件
- Android Annotation(注解),简化View控件的初始化操作。
- 利用注解初始化View对象
- Android:注解初始化findViewById
- android View 动态注解方式,初始化注入对象原理及实现过程
- android : 使用注解初始化控件
- Android 懒人的初始化view
- Android View初始化基本流程
- linux驱动头文件说明
- android学习总结
- 【日常吐槽 · 第三期】又坑了自己
- 面试题88:二叉树中结点的最大距离
- span的属性
- Android通过注解初始化View
- 没事看看
- SQl 语句(常见) 新建,删除,修改表结构
- cmd命令终止和启动进程
- 如何将ubuntu控制台输出到串口?
- CS229 Lecture Notes(2): Logistic Regression
- kerberos原理分析
- MFC ComboBox的使用
- 解决eclipse导出javadoc时的“错误: 编码GBK的不可映射字符”问题