如有不对的地方,望各路大神指点,小女子在此谢过,(*^__^*) 嘻嘻……,要是觉得不错,记得给个赞哦

 

1.Injector类

package com.mobivans.stock.tools.annotation;import android.app.Activity;import android.view.View;import java.lang.reflect.Field;import java.util.List;public class Injector {    /**     * 注入绑定view     *     * @param fieldOwner     * @param activity     */    public static void inject(Object fieldOwner, Activity activity) {        try {            // 绑定View            injectView(fieldOwner, activity);        } catch (Exception e) {            throw new RuntimeException(e);        }    }    /**     * 注入绑定view     *     * @param fieldOwner     * @param view     */    public static void inject(Object fieldOwner, View view) {        try {            // 绑定View            injectView(fieldOwner, view);        } catch (Exception e) {            throw new RuntimeException(e);        }    }    private static void injectView(Object fieldOwner, Object viewProvider) throws Exception {        List fields = ReflectUtils.getFields(fieldOwner.getClass());        for (Field field : fields) {            ViewId viewId = field.getAnnotation(ViewId.class);            if (viewId == null) {                continue;            }            Object view = null;            if (viewProvider instanceof Activity) {                view = ((Activity) viewProvider).findViewById(viewId.value());            } else if (viewProvider instanceof View) {                view = ((View) viewProvider).findViewById(viewId.value());            }            if (view != null) {                field.setAccessible(true);                field.set(fieldOwner, view);            }        }    }}

2.ReflectUtils类

package com.mobivans.stock.tools.annotation;import java.lang.reflect.Field;import java.lang.reflect.InvocationTargetException;import java.lang.reflect.Method;import java.lang.reflect.Modifier;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;/** * @describe:反射相关辅助函数 */public class ReflectUtils {    /**     * 反射调用类成员函数     *     * @param instance     * @param name     * @param paramTypes     * @param paramValues     * @return     * @throws NoSuchMethodException     * @throws InvocationTargetException     * @throws IllegalAccessException     */    public static Object invokeMethod(Object instance, String name, Class<?>[] paramTypes, Object[] paramValues)            throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {        Class<?> clazz = instance.getClass();        Method method = getMethod(clazz, name, paramTypes);        method.setAccessible(true);        return method.invoke(instance, paramValues);    }    /**     * 反射调用类静态成员函数     *     * @param clazz     * @param name     * @param paramTypes     * @param paramValues     * @return     * @throws NoSuchMethodException     * @throws InvocationTargetException     * @throws IllegalAccessException     */    public static Object invokeStaticMethod(Class<?> clazz, String name, Class<?>[] paramTypes, Object[] paramValues)            throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {        Method method = getMethod(clazz, name, paramTypes);        method.setAccessible(true);        return method.invoke(clazz, paramValues);    }    /**     * 设置类成员变量     *     * @param instance     * @param name     * @param value     * @throws NoSuchFieldException     * @throws IllegalAccessException     */    public static void setFieldValue(Object instance, String name, Object value) throws NoSuchFieldException, IllegalAccessException {        Class<?> clazz = instance.getClass();        Field field = getField(clazz, name);        field.setAccessible(true);        field.set(instance, value);    }    /**     * 设置类静态成员变量     *     * @param clazz     * @param name     * @param value     * @throws NoSuchFieldException     * @throws IllegalAccessException     */    public static void setStaticFieldValue(Class<?> clazz, String name, Object value) throws NoSuchFieldException, IllegalAccessException {        Field field = getField(clazz, name);        field.setAccessible(true);        field.set(clazz, value);    }    /**     * 获取类属性值     *     * @param instance     * @param name     * @return     * @throws NoSuchFieldException     * @throws IllegalAccessException     */    public static Object getFieldValue(Object instance, String name) throws NoSuchFieldException, IllegalAccessException {        Class<?> clazz = instance.getClass();        Field field = getField(clazz, name);        field.setAccessible(true);        return field.get(instance);    }    /**     * 获取类静态属性值     *     * @param clazz     * @param name     * @return     * @throws NoSuchFieldException     * @throws IllegalAccessException     */    public static Object getStaticFieldValue(Class<?> clazz, String name) throws NoSuchFieldException, IllegalAccessException {        Field field = getField(clazz, name);        field.setAccessible(true);        return field.get(clazz);    }    /**     * 获取类所有成员变量     *     * @param instance     * @return     * @throws IllegalAccessException     */    public static Map getFieldMap(Object instance) throws IllegalAccessException {        return getFieldMapInternal(instance.getClass(), instance, false);    }    /**     * 获取类所有静态变量     *     * @param clazz     * @return     * @throws IllegalAccessException     */    public static Map getStaticFieldMap(Class<?> clazz) throws IllegalAccessException {        return getFieldMapInternal(clazz, null, true);    }    /**     * 获取类所有成员变量,包含定义在父类的成员     *     * @param clazz     * @return     */    public static List getFields(Class<?> clazz) {        List fields = new ArrayList();        for (Field field : clazz.getDeclaredFields()) {            fields.add(field);        }        if ((clazz != Object.class) && (clazz.getSuperclass() != null)) {            fields.addAll(getFields(clazz.getSuperclass()));        }        return fields;    }    /**     * 获取类所有成员函数,包含定义在父类的成员     *     * @param clazz     * @return     */    public static List getMethods(Class<?> clazz) {        List methods = new ArrayList();        for (Method method : clazz.getDeclaredMethods()) {            methods.add(method);        }        if ((clazz != Object.class) && (clazz.getSuperclass() != null)) {            methods.addAll(getMethods(clazz.getSuperclass()));        }        return methods;    }    /**     * 判断一个类是否集成自另一个类     *     * @param child     * @param parent     * @return     */    public static boolean isSubClassOf(Class<?> child, Class<?> parent) {        if (child == null) {            return false;        }        if (child == parent) {            return true;        }        if (child == Object.class) {            return false;        }        return isSubClassOf(child.getSuperclass(), parent);    }    private static Method getMethod(Class<?> clazz, String name, Class<?>[] paramTypes) throws NoSuchMethodException {        try {            return clazz.getDeclaredMethod(name, paramTypes);        } catch (NoSuchMethodException e) {            if (clazz.getSuperclass() != null) {                return getMethod(clazz.getSuperclass(), name, paramTypes);            } else {                throw e;            }        }    }    private static Field getField(Class<?> clazz, String name) throws NoSuchFieldException {        try {            return clazz.getDeclaredField(name);        } catch (NoSuchFieldException e) {            if (clazz.getSuperclass() != null) {                return getField(clazz.getSuperclass(), name);            } else {                throw e;            }        }    }    private static Map getFieldMapInternal(Class<?> clazz, Object instance, boolean isStatic) throws IllegalAccessException {        Map result = new HashMap();        List fields = getFields(clazz);        for (Field field : fields) {            field.setAccessible(true);            if (isStatic && Modifier.isStatic(field.getModifiers())) {                result.put(field.getName(), field.get(clazz));            } else {                if (instance == null) {                    continue;                }                result.put(field.getName(), field.get(instance));            }        }        return result;    }}

3.ViewId

package com.mobivans.stock.tools.annotation;import android.view.View;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;/** * @describe:标识绑定的View */@Retention(RetentionPolicy.RUNTIME)@Target({ElementType.FIELD})public @interface ViewId {    int value() default View.NO_ID;}

 

使用方法:

@ViewId(R.id.home_recycleView)    MyRecyclerView recyclerView;

在Activity的oncreate方法初始化

  @Override    protected void onCreate(@Nullable Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_feedback);        Injector.inject(this, this);     }

在fragment的onCreateView()方法初始化

  @Nullable    @Override    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {        View view = inflater.inflate(R.layout.fragment_information, container, false);        Injector.inject(this, view);            return view;    }

 

注意:别忘记了初始化哦

 

 

 

 

 

更多相关文章

  1. mac 下配置ANDROID_HOME环境变量
  2. android保存全局变量
  3. Ubuntu 设置Android adb 环境变量
  4. Java环境变量和Android环境变量
  5. Android train——ListView绑定ArrayAdapter、SimpleAdapter、Si
  6. 绑定方式开始服务&调用服务的方法
  7. android databing数据绑定的简单使用
  8. java android maven环境变量基本配置
  9. android USB绑定功能实现(framework)

随机推荐

  1. Android知识梳理:进程间通信
  2. android项目高级UI学习
  3. Android build.prop配置 定义一些宏定义
  4. 安装本机 sdcard
  5. Android 控件背景图片和imagebutton的使
  6. android极简原创系列:tabhost最简单配置
  7. myeclipse8.5+win7 配置android 开发环境
  8. Android Studio介绍
  9. Android沉浸式状态栏以及浅色模式开发
  10. Failed to install ***.apk on device 解