android实现UI控件自动注入到Activity
来源:互联网 发布:sql去重distinct 编辑:程序博客网 时间:2024/06/07 01:21
在写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.getDeclaredFields()){ PActivity.cacheMap.put(f.getName(), f); } } //cacheMap保存R.id里面的所有ID信息 public static final Map<String,Object> cacheMap = new HashMap<String,Object>();}
接着我们可以重写onCreate方法
@Override protected final void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); try { initUI(); init(); } catch (Exception e) { e.printStackTrace(); } } //用java反射来实现控件的自动注入 private void initUI() throws Exception{ Class clzz = this.getClass(); Field[] fields = clzz.getDeclaredFields(); for(Field f : fields){ int v = r(f.getName()); if(v!=0){ Object obj = this.findViewById(v);//控件自动注入 if(obj!=null){ f.setAccessible(true); f.set(this,obj); } } } } abstract protected void init() throws Exception;
现在我们来实际写一个Activity来看看实际的效果吧。
public abstract class TestActivity extends PActivity{ private ImageView screenPic; //替代onCreate方法 @Override protected void init() { //这里就可以直接使用screenPic System.out.println(screenPic); } @Override protected int getLayout() { // TODO Auto-generated method stub return R.layout.main_init; }}
阅读全文
0 0
- android实现UI控件自动注入到Activity
- [Android开发]在Activity中对View控件自动注入
- Android中用到UI控件
- [Android UI界面] 用layout_weight实现ActivityGroup子Activity下剩余空间自动填充问题
- android自动跳转到指定Activity
- Android UI控件自动提示控件(AutoCompleteTextView)
- Android:Activity和Fragment交互、Fragment控件UI升级相关内容
- android开发 从fragment中通过控件跳到另一个activity的实现
- Android中多个UI控件实现滚动
- Android控件之TextView实现Activity跳转
- Android UI控件详解-AutoComplete-TextView(自动提示)
- Android-UI:Activity Dialog
- Android UI + Activity + Events
- android实现从一个activity跳转到另一个activity中
- Android UI效果实现——Activity滑动退出效果
- android中如何实现进入一个界面不做任何动作过10秒钟自动跳转到其他activity?
- android中如何实现进入一个界面不做任何动作过10秒钟自动跳转到其他activity?
- android自定义控件自动换行效果实现
- 如何读懂DataSheet
- 确定msm8937+android7.1采用的dtb文件
- Socket通信
- 3 Steps to Perform SSH Login Without Password Using ssh-keygen & ssh-copy-id
- SASS的编译
- android实现UI控件自动注入到Activity
- 欢迎使用CSDN-markdown编辑器
- Shell脚本——字符串截取
- Hystrix使用入门手册(中文)
- 简介JVM的CMS垃圾收集器
- 导弹的召唤!!!
- Mac配置MySQL
- Android Intent跳转回传
- 用资源管理器打开ftp站点跳转浏览器解决方法