一、引言

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();@Overrideprotected 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;@Overridepublic int getLayoutId() {// TODO Auto-generated method stubreturn R.layout.activity_claim;}}

这样就可以了。几行代码可以大大的提高工作效率。


三、参考资料

1、http://www.2cto.com/kf/201405/302998.html 

更多相关文章

  1. Android(安卓)面试题(5):谈谈 Handler 机制和原理?
  2. Android(安卓)Dagger2 初学笔记
  3. Android退出当前应用程序的方法
  4. Android(安卓)NotificationManager 和Notification的使用总结
  5. android sqlite SQLiteDatabase 操作大全 不看后悔!必收藏!看后精
  6. Android多线程(三)HandlerThread源码原理解析
  7. Android(安卓)控件之TextView常见使用问题
  8. android中版本webView中js不执行问题
  9. 【Android笔记 七】Android(安卓)Sensor感应器介绍(三)获取用户移

随机推荐

  1. Android(安卓)官方命令深入分析之android
  2. android 文件读取
  3. android高级应用课程
  4. android (4)控件的xml属性
  5. android adb 命令
  6. 【Android布局】在程序中设置android:gra
  7. 【Android布局】在程序中设置android:gra
  8. Android(安卓)Studio安装以及Fetching an
  9. Android工具箱之理解app资源文件
  10. Android的网站资源收集大全