diff --git a/arouter-api/src/main/java/com/alibaba/android/arouter/facade/Postcard.java b/arouter-api/src/main/java/com/alibaba/android/arouter/facade/Postcard.java index a886bb46..6673cc4f 100644 --- a/arouter-api/src/main/java/com/alibaba/android/arouter/facade/Postcard.java +++ b/arouter-api/src/main/java/com/alibaba/android/arouter/facade/Postcard.java @@ -168,6 +168,11 @@ public void navigation(Activity mContext, int requestCode, NavigationCallback ca ARouter.getInstance().navigation(mContext, this, requestCode, callback); } + public void navigation(android.support.v4.app.Fragment fragment, int requestCode) { + ARouter.getInstance().navigation(fragment, this, requestCode, null); + } + + /** * Green channel, it will skip all of interceptors. * diff --git a/arouter-api/src/main/java/com/alibaba/android/arouter/launcher/ARouter.java b/arouter-api/src/main/java/com/alibaba/android/arouter/launcher/ARouter.java index d1292a3e..5f09e656 100644 --- a/arouter-api/src/main/java/com/alibaba/android/arouter/launcher/ARouter.java +++ b/arouter-api/src/main/java/com/alibaba/android/arouter/launcher/ARouter.java @@ -7,7 +7,6 @@ import com.alibaba.android.arouter.exception.InitException; import com.alibaba.android.arouter.facade.Postcard; import com.alibaba.android.arouter.facade.callback.NavigationCallback; -import com.alibaba.android.arouter.facade.model.RouteMeta; import com.alibaba.android.arouter.facade.template.ILogger; import com.alibaba.android.arouter.facade.template.IRouteGroup; import com.alibaba.android.arouter.utils.Consts; @@ -186,6 +185,10 @@ public Object navigation(Context mContext, Postcard postcard, int requestCode, N return _ARouter.getInstance().navigation(mContext, postcard, requestCode, callback); } + public Object navigation(android.support.v4.app.Fragment fragment, Postcard postcard, int requestCode, NavigationCallback callback) { + return _ARouter.getInstance().navigation(fragment, fragment.getActivity(), postcard, requestCode, callback); + } + /** * Add route group dynamic. * @param group route group. diff --git a/arouter-api/src/main/java/com/alibaba/android/arouter/launcher/_ARouter.java b/arouter-api/src/main/java/com/alibaba/android/arouter/launcher/_ARouter.java index 79a94f81..1f69e284 100644 --- a/arouter-api/src/main/java/com/alibaba/android/arouter/launcher/_ARouter.java +++ b/arouter-api/src/main/java/com/alibaba/android/arouter/launcher/_ARouter.java @@ -273,15 +273,19 @@ protected T navigation(Class service) { } } - /** - * Use router navigation. - * - * @param context Activity or null. - * @param postcard Route metas - * @param requestCode RequestCode - * @param callback cb - */ - protected Object navigation(final Context context, final Postcard postcard, final int requestCode, final NavigationCallback callback) { + protected Object navigation(Context context, final Postcard postcard, final int requestCode, final NavigationCallback callback) { + return navigation(null, context, postcard, requestCode, callback); + } + + /** + * Use router navigation. + * + * @param context Activity or null. + * @param postcard Route metas + * @param requestCode RequestCode + * @param callback cb + */ + protected Object navigation(final android.support.v4.app.Fragment fragment, final Context context, final Postcard postcard, final int requestCode, final NavigationCallback callback) { PretreatmentService pretreatmentService = ARouter.getInstance().navigation(PretreatmentService.class); if (null != pretreatmentService && !pretreatmentService.onPretreatment(context, postcard)) { // Pretreatment failed, navigation canceled. @@ -334,7 +338,7 @@ public void run() { */ @Override public void onContinue(Postcard postcard) { - _navigation(postcard, requestCode, callback); + _navigation(fragment, postcard, requestCode, callback); } /** @@ -352,13 +356,13 @@ public void onInterrupt(Throwable exception) { } }); } else { - return _navigation(postcard, requestCode, callback); + return _navigation(fragment, postcard, requestCode, callback); } return null; } - private Object _navigation(final Postcard postcard, final int requestCode, final NavigationCallback callback) { + private Object _navigation(final android.support.v4.app.Fragment fragment, final Postcard postcard, final int requestCode, final NavigationCallback callback) { final Context currentContext = postcard.getContext(); switch (postcard.getType()) { @@ -388,7 +392,7 @@ private Object _navigation(final Postcard postcard, final int requestCode, final runInMainThread(new Runnable() { @Override public void run() { - startActivity(requestCode, currentContext, intent, postcard, callback); + startActivity(fragment, requestCode, currentContext, intent, postcard, callback); } }); @@ -438,9 +442,11 @@ private void runInMainThread(Runnable runnable) { * * @see ActivityCompat */ - private void startActivity(int requestCode, Context currentContext, Intent intent, Postcard postcard, NavigationCallback callback) { + private void startActivity(android.support.v4.app.Fragment fragment, int requestCode, Context currentContext, Intent intent, Postcard postcard, NavigationCallback callback) { if (requestCode >= 0) { // Need start for result - if (currentContext instanceof Activity) { + if (fragment != null) { + fragment.startActivityForResult(intent, requestCode); + } if (currentContext instanceof Activity) { ActivityCompat.startActivityForResult((Activity) currentContext, intent, requestCode, postcard.getOptionsBundle()); } else { logger.warning(Consts.TAG, "Must use [navigation(activity, ...)] to support [startActivityForResult]");