我們都知道Android中是通過(guò)findViewById()這個(gè)方法來(lái)綁定xml中的控件的。但是當(dāng)控件較多時(shí),findViewById()的代碼行數(shù)也會(huì)隨之增多,而且這些findViewById函數(shù)并沒(méi)有表示其他特殊的含義。因此,activity中大量重復(fù)的findViewById()方法就導(dǎo)致了整個(gè)代碼看起來(lái)很臃腫。
還好,我們可以使用注解的方法來(lái)簡(jiǎn)化findViewById()
第一步,定義我們的注解類(lèi):
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
public @interface ViewInject {
int value() default 0;
}
第二步,在activity中增加解析注解方法
public void autoInjectAllField() {
try {
Class<?> clazz = this.getClass();
Field[] fields = clazz.getDeclaredFields();//獲得Activity中聲明的字段
for (Field field : fields) {
// 查看這個(gè)字段是否有我們自定義的注解類(lèi)標(biāo)志的
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));//給我們要找的字段設(shè)置值
}
}
}
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
}
}
第三步 enjoy it!
/**
*用法示例
**/
@ViewInject(R.id.tv_main)
TextView text;