提供统一的页面跳转、回调、参数解析、协议处理

结合AFW ui库,我们希望我们针对activity、fragment、dialog等有一个统一的跳转方式,甚至包括一些协议的处理,以及参数的传递和解析

回调

首先定义回调接口

1
2
3
4
5
6
7
8
public interface RouterCallBacker<T> {

/**
* 回调方法,返回指定信息
* @param result
*/
void callBackResult(T result);
}

在发起跳转的时候,根据判断是否有回调者进行关联key的生成并缓存以及向下传递;

在回调方,直接通过key进行结果回调,这样就简单实现了跳转回调的功能。

参数传递解析

因为需要提供一个统一的使用体验,所以在参数传递的时候考虑bundle进行传递;在Activity中通过Intent extra传递,fragment通过arguments传递。

参数解析的使用;对于传递的参数,其实在业务中只有直接拿来用的需求,所以怎么取值等操作都是重复性的,所以这边利用注解实现了传递值的读取,使得业务可以直接拿来使用。

1
2
3
4
5
6
7
8
9
10
11
12
private static List<Field> parseField(Class<?> clazz) {
List<Field> fields = new ArrayList<>();
Field[] declaredFields = clazz.getFields();
if(declaredFields.length > 0) {
for(Field field : declaredFields) {
if(field.isAnnotationPresent(BindParam.class)) {
fields.add(field);
}
}
}
return fields;
}
1
2
3
4
private static void setupField(Object target, Field field, Bundle bundle) {
String key = field.getAnnotation(BindParam.class).value();
trySet(field, target, bundle.get(key));
}