创建初始化控件注解接口
@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);
}
});