标签:viewinject android 框架
Android中通过findViewById在布局文件中找到需要的View,加入一个Activity里面有许多的View需要初始化,那将是一件很繁琐的事情。当然Google一下你会发现有很多Android Annotations框架。比如比较有名的“Android Annotations”,这样的框架很复杂,用起来也比较麻烦,还有一些BUG,第一次使用也花费了不少时间研究。也许你在项目中只希望用到 Inject View这个功能,又或者你想知道这个实现的原理是怎样的。本文主要是解决这两个问题,实现一个最简单的ViewInject.
原理是在Activity加载好后通过找到Activity中使用注解的字段,再通过Java反射的方式,动态的给这个字段设置值。
/** * view inect by id * * @author Lucky * */ @Target(ElementType.FIELD)//表示用在字段上 @Retention(RetentionPolicy.RUNTIME)//表示在生命周期是运行时 public @interface ViewInject { int value() default 0; }
/** * * @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(); } } }
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
数据格式转换 (三)Office文档转HTML,布布扣,bubuko.com
标签:viewinject android 框架
原文地址:http://blog.csdn.net/hyfsoft2/article/details/30247847