当前位置: 代码迷 >> Android >> Android引文式绑定控件BindView
  详细解决方案

Android引文式绑定控件BindView

热度:118   发布时间:2016-04-27 22:20:29.0
Android注解式绑定控件BindView

转载请注明 出处:http://blog.csdn.net/u012975705/article/details/49637401
Android注解式绑定控件BindView

BindView.java

package com.practice.noyet.coolweather.util;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

package com.practice.noyet.coolweather.util;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中:

package com.practice.noyet.coolweather.adapter;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);        }    }}

SpinnerAdapter详见:http://blog.csdn.net/u012975705/article/details/48471835

对已自定义View的使用方式

initBindView(view)

版权声明:本文为博主原创文章,转载请注明出处。博客首页:http://blog.csdn.net/u012975705

  相关解决方案