Android注解式绑定控件BindView
BindView.java
AnnotateUtil.java
使用方式
Activity、Fragment中:
Adapter的ViewHolder中:
BindView.java
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 BindView {
int id();
boolean click() default false;
}
AnnotateUtil.java
import android.annotation.TargetApi;
import android.app.Activity;
import android.app.Fragment;
import android.content.Context;
import android.util.Log;
import android.view.View;
import java.lang.reflect.Field;
public class AnnotateUtil {
public AnnotateUtil() {
}
public static void initBindView(Object currentClass, View sourceView) {
Field[] fields = currentClass.getClass().getDeclaredFields();
if(fields != null && fields.length > 0) {
Field[] var6 = fields;
int var5 = fields.length;
for(int var4 = 0; var4 < var5; ++var4) {
Field field = var6[var4];
BindView bindView = (BindView)field.getAnnotation(BindView.class);
if(bindView != null) {
int viewId = bindView.id();
boolean clickLis = bindView.click();
try {
field.setAccessible(true);
if(clickLis) {
sourceView.findViewById(viewId).setOnClickListener((View.OnClickListener)currentClass);
}
field.set(currentClass, sourceView.findViewById(viewId));
} catch (Exception var11) {
var11.printStackTrace();
}
}
}
}
}
public static void initBindView(Activity aty) {
initBindView(aty, aty.getWindow().getDecorView());
}
public static void initBindView(View view) {
Context cxt = view.getContext();
if(cxt instanceof Activity) {
initBindView((Activity)cxt);
} else {
Log.d("AnnotateUtil.java", "the view don\'t have root view");
}
}
@TargetApi(11)
public static void initBindView(Fragment frag) {
initBindView(frag, frag.getActivity().getWindow().getDecorView());
}
}
使用方式
Activity、Fragment中:
@BindView(id = R.id.headerlayout)
private HeaderLayout headerLayout;
@Override
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.acitvity_weather);
AnnotateUtil.initBindView(this);
}
Adapter的ViewHolder中:
import android.content.Context;
import android.graphics.Color;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.practice.noyet.coolweather.model.County;
import com.practice.noyet.coolweather.util.AnnotateUtil;
import com.practice.noyet.coolweather.util.BindView;
public class SpinnerArrayAdapter extends SpinnerAdapter<County> {
public SpinnerArrayAdapter(Context context) {
super(context);
}
@Override
public View getView(int position, View view, ViewGroup viewGroup) {
Holder holder;
if (view == null) {
view = mInflater.inflate(android.R.layout.simple_list_item_1, null);
holder = new Holder(view);
view.setTag(holder);
} else {
holder = (Holder) view.getTag();
}
County county = (County) getItem(position);
holder.textView.setText(county.getCountyName());
return view;
}
private class Holder {
@BindView(id = android.R.id.text1)
public TextView textView;
public Holder(View view) {
AnnotateUtil.initBindView(this, view);
}
}
}