-
Notifications
You must be signed in to change notification settings - Fork 208
跳转 接口路由的方式
xiaojinzi123 edited this page Apr 12, 2022
·
6 revisions
每一个路由跳转都可以使用接口声明的方式去描述,然后使用特定的方式就可以达到路由的功能
显式的声明了一个方法去描述如果路由到某一个界面.
- 就是对同一个界面的跳转都可以用一个接口去跳转,可控度增加了,维护变得简单
- 就是你需要把这个接口的声明下沉到
BaseModule
.相比每一处跳转自己去写来说,这种方式增加了BaseModule
的负担
目前此方案中两种方案都是完全支持的,后续也会一直支持下去.但是两种方式在你们项目中的使用需要你们自己去估量你们自己的团队更倾向于哪一种方式
像 Retrofit
一样,创建一个接口 App.class
,然后在内部用方法去描述一个路由
然后使用 @RouterApiAnno()
注解标记这个接口,这一步不能少
@RouterApiAnno()
public interface App {
// 声明一个接口描述跳转到登录界面
// @HostAndPathAnno 等同于 @HostAnno + @PathAnno
@HostAndPathAnno("user/login")
void toLoginView(Context context);
}
// 执行跳转
Router.withApi(App.class).toLoginView(this);
- 参数
- Context
- Fragment
- Callback
- BiCallback
- 返回值
- NavigationDisposable
- Call
- Navigator
上述这些参数是框架自己能解析到的,其他参数都需要使用对应的注解来告诉框架
@RouterApiAnno()
public interface App {
// 增加一个 Callback 就 ok 了
@HostAndPathAnno("user/login")
void toLoginView(Context context,Callback back);
}
@RouterApiAnno()
public interface App {
// 返回值写 NavigationDisposable
@HostAndPathAnno("user/login")
NavigationDisposable toLoginView(Context context,Callback back);
}
@RouterApiAnno()
public interface App {
// 回调改成 BiCallback<ActivityResult>
// 添加上 @NavigateAnno(forResult = true) 表示本次路由是为了 `ActivityResult`
// 不要忘记添加 @RequestCodeAnno() 表示会自动会为本次路由生成一个可用的requestCode
@NavigateAnno(forResult = true)
@RequestCodeAnno()
@HostAndPathAnno("user/login")
void toLoginView(Context context, BiCallback<ActivityResult> back);
}
@RouterApiAnno()
public interface App {
// 回调改成 BiCallback<Intent>
// 添加上 @NavigateAnno(forIntent = true) 表示本次路由是为了 `Intent`
// 不要忘记添加 @RequestCodeAnno() 表示会自动会为本次路由生成一个可用的requestCode
@NavigateAnno(forIntent = true)
@RequestCodeAnno()
@HostAndPathAnno("user/login")
void toLoginView(Context context, BiCallback<Intent> back);
}
@RouterApiAnno()
public interface App {
// 回调改成 BiCallback<Integer>
// 添加上 @NavigateAnno(forResultCode = true) 表示本次路由是为了 `Integer`
// 不要忘记添加 @RequestCodeAnno() 表示会自动会为本次路由生成一个可用的requestCode
@NavigateAnno(forResultCode = true)
@RequestCodeAnno()
@HostAndPathAnno("user/login")
void toLoginView(Context context, BiCallback<Integer> back);
}
@RouterApiAnno()
public interface App {
// 回调改成 BiCallback<Intent>
// 添加上 @NavigateAnno(forIntent = true) 表示本次路由是为了 `Intent`
// resultCodeMatch表示本次路由会匹配 resultCode 为Activity.RESULT_OK
// 不要忘记添加 @RequestCodeAnno() 表示会自动会为本次路由生成一个可用的requestCode
@NavigateAnno(forIntent = true, resultCodeMatch = Activity.RESULT_OK)
@RequestCodeAnno()
@HostAndPathAnno("user/login")
void toLoginView(Context context, BiCallback<Intent> back);
}
@RouterApiAnno()
public interface App {
// 回调改成 Callback
// 添加上 @NavigateAnno(resultCodeMatch = Activity.RESULT_OK) 表示本次路由会匹配 resultCode 为Activity.RESULT_OK
// 不要忘记添加 @RequestCodeAnno() 表示会自动会为本次路由生成一个可用的requestCode
@NavigateAnno(resultCodeMatch = Activity.RESULT_OK)
@RequestCodeAnno()
@HostAndPathAnno("user/login")
void toLoginView(Context context, Callback callBack);
}
@RouterApiAnno()
public interface App {
// @RequestCodeAnno(123) 表示会自动会为本次路由使用 `123` 的requestCode
@NavigateAnno(forIntent = true)
@RequestCodeAnno(123)
@HostAndPathAnno("user/login")
void toLoginView(Context context, BiCallback<Intent> back);
}
@RouterApiAnno()
public interface App {
// @RequestCodeAnno() 标记 `int` or `Integer` 参数即可
@NavigateAnno(forIntent = true)
@HostAndPathAnno("user/login")
void toLoginView(
Context context,
@RequestCodeAnno() int requestCode,
BiCallback<Intent> back
);
}
@RouterApiAnno()
@HostAnno("user")
public interface App {
// 声明一个接口描述跳转到登录界面
@PathAnno("login")
void toLoginView(Context context);
}
@RouterApiAnno()
@HostAnno("app")
public interface App {
// 使用 @HostAndPathAnno() 或者 @HostAnno() + @PathAnno()
@HostAnno("user")
@PathAnno("login")
void toLoginView(Context context);
}
@RouterApiAnno()
public interface App {
// 返回值改成 Call 就可以了,调用了方法不会执行路由,需要你拿到 Call 对象自行调用
// 注意不能和 @NavigateAnno 注解混合使用,因为两者含义冲突
@HostAndPathAnno("user/login")
Call toLoginView(Context context);
}
目前支持的全部参数类型都在下面了
@PathAnno("test")
void test1(Context context,
@ParameterAnno("data1") String data1,
@ParameterAnno("data2") byte data2,
@ParameterAnno("data3") short data3,
@ParameterAnno("data4") int data4,
@ParameterAnno("data5") long data5,
@ParameterAnno("data6") float data6,
@ParameterAnno("data7") double data7,
@ParameterAnno("data8") User data8,
@ParameterAnno("data9") Parcelable data9,
@ParameterAnno("data10") Serializable data10,
@ParameterAnno("data11") CharSequence data11,
@ParameterAnno("data12") Bundle data12,
@ParameterAnno("data13") ArrayList<String> stringArrayList,
@ParameterAnno("data14") ArrayList<Integer> integerArrayList,
@ParameterAnno("data15") ArrayList<Parcelable> parcelableArrayList,
@ParameterAnno("data16") ArrayList<CharSequence> charSequenceArrayList,
@ParameterAnno("data17") byte[] data17,
@ParameterAnno("data18") char[] data18,
@ParameterAnno("data19") String[] data19,
@ParameterAnno("data20") short[] data20,
@ParameterAnno("data21") int[] data21,
@ParameterAnno("data22") long[] data22,
@ParameterAnno("data23") float[] data23,
@ParameterAnno("data24") double[] data24,
@ParameterAnno("data25") boolean[] data25,
@ParameterAnno("data26") Parcelable[] data26,
@ParameterAnno("data27") CharSequence[] data27,
Bundle data28
);