-
Notifications
You must be signed in to change notification settings - Fork 208
跳转 使用代码跳转
// 这种会默认使用 Application
Router.with()
.....
// 注意: 当你想要使用 `startActivityForResult` 拿 `ActivityResult` 就需要传入 对应的Fragment 或者 Activity,而不可以像
// 上面那样省略不传,如果不是会导致路由失败(不会奔溃)
Router.with(context)
......
Router
.with(this)
.url("router://component1/main")
.putString("name", "cxj")
.putString("pass", "123")
.forward();
这段就跳转到上面我们写的那个例子的界面中了,并且我们还传了两个 String
值过去哦
Router
.with(this)
.host("component1")
.path("main")
.putString("name", "cxj")
.putString("pass", "123")
.forward();
这段就跳转到上面我们写的那个例子的界面中了,我们传了两个 String
值,并且额外存了两个值到 Bundle
中携带过去,和我们普通的传值效果是一样的,唯一的区别是 路由的 putXXX
方式利用方法名区别传不同的值, Intent
靠重载方法来传不同的值,但是我更倾向于利用方法区分,因为一旦你入参的参数类型有改动的时候,方法就会报错,而 Intent
不会
Intent intent = new Intent(Context,XXX.class);
intent.putExtra(key,value);
Router
.with(this)
.host("component1")
.path("main")
.putString("name", "cxj")
.putString("pass", "123")
.putString("name", "cxj1")
.putInt("age", 25)
.forward();
Router.with(this)
.host("component1")
.path("main")
.putString("name", "cxj")
.putString("pass", "123")
.forward(new CallbackAdapter() {
@Override
public void onSuccess(@NonNull RouterResult result) {
// 跳转成功,参数是 request 对象
}
@Override
public void onError(@NonNull Exception error) {
// 跳转失败,参数是 Exception 对象
}
});
Router.with(this)
.host("component1")
.path("main")
.putString("name", "cxj")
.putString("pass", "123")
.forward(new CallbackAdapter() {
@Override
public void onEvent(@Nullable RouterResult routerResult, @Nullable Exception error) {
// 跳转成功,参数是 request 对象
}
});
这种就是成功和失败都能从一个方法中拿到
Router
// 这时候必须传入 Activity 的 Context 对象
.with(this)
.host("component1")
.path("main")
.putString("name", "cxj")
.putString("pass", "123")
.requestCode(456) // requestCode
.forward();
你就可以在 onActivityResult 方法中拿到数据啦,这种方式和原生的写法没什么差别,骚操作且看下面
Router
.with(this)
.host("component1")
.path("main")
.putString("name", "cxj")
.putString("pass", "123")
.requestCode(456) // requestCode
.forwardForResult(new BiCallback.BiCallbackAdapter<ActivityResult>() {
@Override
public void onSuccess(@NonNull RouterResult result, @NonNull ActivityResult activityResult) {
super.onSuccess(result, activityResult);
// 你就拿到了 ActivityResult
}
});
Router
.with(this)
.host("component1")
.path("main")
.putString("name", "cxj")
.putString("pass", "123")
.requestCode(456) // requestCode
.forwardForIntent(new BiCallback.BiCallbackAdapter<Intent>() {
@Override
public void onSuccess(@NonNull RouterResult result, @NonNull Intent intent) {
super.onSuccess(result, intent);
// 你就拿到了 Intent
}
});
Router
.with(this)
.host("component1")
.path("main")
.putString("name", "cxj")
.putString("pass", "123")
.requestCode(456) // requestCode
.forwardForIntentAndResultCodeMatch(new BiCallback.BiCallbackAdapter<Intent>() {
@Override
public void onSuccess(@NonNull RouterResult result, @NonNull Intent intent) {
super.onSuccess(result, intent);
// 你就拿到了 Intent
}
},Activity.RESULT_OK);
rx
库只是基于基础包支持了 RxJava2
,所以上述的方式都能转化成为 Observable
的方式,具体看下面的演示吧
// 这里返回的 Completable 你可以结合 RxJava 嵌入整体流程中
Completable completable = RxRouter.with(this)
.host("component1")
.path("main")
.putString("name", "cxj")
.call();
completable.subscribe();
RxRouter
.with(this)
.host("component1")
.path("main")
.putString("name", "cxj")
.putString("pass", "123")
.requestCode(456)
.newIntentCall()
.subscribe(new Consumer<Intent>() {
@Override
public void accept(Intent intent) throws Exception {
// intent 参数中拿数据
}
}, new Consumer<Throwable>() {
@Override
public void accept(Throwable throwable) throws Exception {
// 你可以自己处理错误,如果不传入 错误的回调接口,默认忽略
}
});
这种方式可以说很明显减少了平常写的代码的量,并且让你摆脱了 onActivityResult,所以这可以在** Adapter 或者 任何一个有 Context(其实是一个Activity)的地方去使用** 上述的写法是要处理错误,如果你不想处理错误,可以这样写
RxRouter
.with(this)
.host("component1")
.path("main")
.putString("name", "cxj")
.putString("pass", "123")
.requestCode(456)
.newIntentCall()
.subscribe(new Consumer<Intent>() {
@Override
public void accept(Intent intent) throws Exception {
// intent 参数中拿数据
}
});
因为上面的使用你都是拿到一个 Single Observable,所以你可以拿着这个 Observable 和其他的任何流程进行结合使用 完美的嵌入到一个流程中,不会被 onActivityResult 等方式打断你的流程
Router
.with(this)
.host(ModuleConfig.System.NAME)
.path(ModuleConfig.System.CALL_PHONE)
.interceptors(DialogShowInterceptor.class)
.forward(new CallbackAdapter() {
@Override
public void onEvent(@Nullable RouterResult result, @Nullable Exception error) {
super.onEvent(result, error);
}
@Override
public void onCancel() {
super.onCancel();
}
});
finish();
当销毁这个Actiivty的时候,路由请求如果还没有跳转过去,比如因为中间的拦截器等因素,那么就会自动取消这个路由请求
RxRouter
.withFragment(this)
.host(ModuleConfig.System.NAME)
.path(ModuleConfig.System.CALL_PHONE)
.interceptors(DialogShowInterceptor.class)
.forward(new CallbackAdapter(){
@Override
public void onEvent(@Nullable RouterResult result, @Nullable Exception error) {
super.onEvent(result, error);
}
@Override
public void onCancel() {
super.onCancel();
}
});
getActivity().getSupportFragmentManager().beginTransaction().remove(this).commit();
当销毁这个Fragment的时候,路由请求如果还没有跳转过去,比如因为中间的拦截器等因素,那么就会自动取消这个路由请求
Router
.with(this)
.host(ModuleConfig.System.NAME)
.path(ModuleConfig.System.CALL_PHONE)
.beforJumpAction(new xiaojinzi.component.support.Action() {
@Override
public void run() throws Exception {
Toast.makeText(mContext, "startActivity之前", Toast.LENGTH_SHORT).show();
}
})
.afterJumpAction(new xiaojinzi.component.support.Action() {
@Override
public void run() throws Exception {
Toast.makeText(mContext, "startActivity之后", Toast.LENGTH_SHORT).show();
}
})
.navigate();