这是之前工作时经常用到的一种映射方式,自己感觉非常不错,可以省却繁琐的findViewbyId的代码,代码结构清晰。
(1)创建注解
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.TYPE})
public @interface LibViewMapping {
String str_ID();
String type();
}
(2)在Activity中为类及其控件属性添加注解
@LibViewMapping(str_ID="lib_goback",type="id")
private LinearLayout bt_topleft;
@LibViewMapping(str_ID="lib_more",type="id")
private ImageButton bt_topright;
……
}
(3)利用反射创建layout.xml文件及其内部资源与Activity类及属性的映射工具类
利用java.lang.reflet包中的反射方法遍历类对象的属性Field[] fields = clazz.getDeclaredFields(),获取属性上的注解 viewMapping = field.getAnnotation(LibViewMapping.class),然后为控件属性设置value
str_ID = viewMapping.str_ID();
type = viewMapping.type();
field.setAccessible(true);
field.set(object, rootView.findViewById(context.getResources().getIdentifier(str_ID, type, context.getPackageName())));
(1)创建注解
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.TYPE})
public @interface LibViewMapping {
String str_ID();
String type();
}
(2)在Activity中为类及其控件属性添加注解
@LibViewMapping(str_ID="lib_goback",type="id")
private LinearLayout bt_topleft;
@LibViewMapping(str_ID="lib_more",type="id")
private ImageButton bt_topright;
……
}
(3)利用反射创建layout.xml文件及其内部资源与Activity类及属性的映射工具类
利用java.lang.reflet包中的反射方法遍历类对象的属性Field[] fields = clazz.getDeclaredFields(),获取属性上的注解 viewMapping = field.getAnnotation(LibViewMapping.class),然后为控件属性设置value
str_ID = viewMapping.str_ID();
type = viewMapping.type();
field.setAccessible(true);
field.set(object, rootView.findViewById(context.getResources().getIdentifier(str_ID, type, context.getPackageName())));
(4)在Activity的onCreate()方法中调用工具类方法
现在第三方的依赖注入库已经有比较成熟的了,可选择性也比较多,具体项目中可尝试使用依赖注入库ButterKnife 或 Dagger2