官方例子里的小玩意。。。。。
一个注解:InjectView
package com.huiyun.ixconfig.utils;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
public @interface InjectorValue {
public int values();
}
一个通过反射注解 并 实例化的功能类:
package com.huiyun.ixconfig.utils;
import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
import android.app.Activity;
public final class Injector {
private final Activity mActivity;
private Injector(Activity activity) {
mActivity = activity;
}
public static Injector get(Activity activity) {
return new Injector(activity);
}
public void inject() {
for (Field field : mActivity.getClass().getDeclaredFields()) {
for (Annotation annotation : field.getAnnotations()) {
if (annotation.annotationType().equals(InjectorValue.class)) {
try {
Class<?> fieldType = field.getType();
int idValue = InjectorValue.class.cast(annotation).values();
field.setAccessible(true);
Object injectedValue = fieldType.cast(mActivity.findViewById(idValue));
if (injectedValue == null) {
throw new IllegalStateException("findViewById(" + idValue
+ ") gave null for " +
field + ", can't inject");
}
field.set(mActivity, injectedValue);
field.setAccessible(false);
} catch (IllegalAccessException e) {
throw new IllegalStateException(e);
}
}
}
}
}
}
代替findbyId
@InjectorValue(values=R.id.lay_group)
private LinearLayout lay_Group;
onCreate调用
Injector.get(this).inject();