在写android程序里要获取UI控件,我们都必须在Activity通过findViewById()来获取各个UI控件。当然有很多第三方的框架都帮我们简化了这个操作(具体的不在这里介绍了),但本人都觉得还不够简单。因此决定自己写一个控件自动注入。
在android里,所有在layout里画出的控件你都可以定义一个唯一的ID。
<ImageView android:id="@+id/screenPic"/>
然而所有的控件ID都会自动生成在android的R.java文件里。
public final class R {
public static final class id {
public static final int screenPic=0x7f080021;
}
}
这样我们就可以开始实现自动注入了,但前提有一个约定,即:Activity中的控件变量名必须与UI里面定义的ID一致。
我们可以先定义一个Activity的抽象类,在里面通过一段静态代码块来将R文件里的控件ID信息保存在内存中。
public abstract class PActivity extends Activity{
static{
Class rzz = R.id.class;
//将所有的控件ID存放在内存中
for(Field f : rzz.getDeclaredFie