Annotation Sample
06 Feb 2018目標:建立類似Butterknife的Annotation
Create a Annotation class
@Retention(CLASS) @Target(FIELD)
public @interface Bind {
@IdRes int value();
}
write a Singleton class to handle TODO
public class AnnotationBind {
private static AnnotationBind annotationBind;
public static AnnotationBind instance() {
synchronized (AnnotationBind.class){
if(annotationBind == null){
annotationBind = new AnnotationBind();
} return annotationBind;
}
}
public void inject(Object o){
Class aClass = o.getClass();
Field[] declaredFields = aClass.getDeclaredFields();
for (Field field:declaredFields) {
if(field.isAnnotationPresent(Bind.class)) {
Bind annotation = field.getAnnotation(Bind.class);
try {
field.setAccessible(true);
field.set(o, ((Activity)o).findViewById(annotation.value()));
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}
}
}
}
inject the class when activity oncreate
@Bind(R.id.text)
TextView before;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
AnnotationBind.instance().inject(this);
before.setText("dddd");
}