注解点击事件

创建初始化控件注解接口
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface FindViewBid {
int value();
}
创建点击注解接口
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Onclick {
int onclick();
}
创建注解类
public class AianMite {
public static void par(MainActivity activity){
chushihua(activity);
onclick(activity);
}

public static void onclick(final MainActivity activity) {
    //获取到当前activity
    Class aClass = activity.getClass();
    //取出当前activity里面的所有方法
    Method[] methods = aClass.getMethods();
    //循环这些方法
    for (final Method method:methods) {
        //判断是否被这个注解注释
        boolean present = method.isAnnotationPresent(Onclick.class);
        if (present) {
            //如果有这个注解就取出这个注解
            Onclick onclick = method.getAnnotation(Onclick.class);
            if (onclick!=null) {
                //取出这个注解里的内容
                int dianji = onclick.onclick();
                //执行注解省略的方法
                View viewById = activity.findViewById(dianji);
                if (viewById!=null) {
                    //点击事件
                    viewById.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            try {
                                method.invoke(activity);
                            } catch (IllegalAccessException e) {
                                e.printStackTrace();
                            } catch (InvocationTargetException e) {
                                e.printStackTrace();
                            }
                        }
                    });
                }
            }
        }
    }
}

public static void chushihua(MainActivity activity) {
    Class aClass = activity.getClass();
    //获取activity里的所有属性
    Field[] fields = aClass.getFields();
    //循环这些属性
    for (Field field:fields){
        //判断当前属性是否被FindViewBid注解标识
        boolean present = field.isAnnotationPresent(FindViewBid.class);
        if (present) {
            //如果被标识就获取这个注解
            FindViewBid findViewBid = field.getAnnotation(FindViewBid.class);
            //取出注解里的内容
            int value = findViewBid.value();
            //在注解里进行想要省略的操作
            View viewById = activity.findViewById(value);
            //因为属性为私有,暴力反射
            field.setAccessible(true);
            try {
                //给属性赋值
                field.set(activity,viewById);
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            }
        }
    }
}

package com.bwie.zhaoguangjin2019325.model.ulit;

import com.bwie.zhaoguangjin2019325.model.app.Api;

import retrofit2.Retrofit;
import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory;
import retrofit2.converter.gson.GsonConverterFactory;

public class Ulit {

public Api api;
private static final Ulit ULIT = new Ulit();

public Ulit() {

}

public static Ulit getdan() {
    return ULIT;
}

public void getUlit() {
    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl("http://172.17.8.100/")
            .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
            .addConverterFactory(GsonConverterFactory.create())
            .build();
    api = retrofit.create(Api.class);
}

}
getdan.getUlit();
getdan.api.getSP().subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer() {
@Override
public void accept(SPBean spBean) throws Exception {
activity.getinrenter(spBean);
}
});

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值