前言
有一些公司的项目, 采用的架构是单 Activity, 多 Fragment 的形式.
核心就是依赖标记到静态方法上实现. Component 支持这种形式, 所以下面是以 Component 为例讲解的
正文
跳转一个 Activity, 多数框架都可以支持. 但是现在市面上所有的框架, 跳转 Fragment 只是一个名词, 只是通过服务发现获取到一个 Fragment 而已.
比如下面的代码:
Fragment fragment = Router.with("xxxFragment").putXXX(xxx).navigate();
然后你拿到 Fragment 进行处理. 那能不能这个过程能和正常的跳转一样去使用呢? 一个正常的跳转如下样子:
Router.with(context)
.host("<host>")
.path("<path>")
.putInt(xxx)
.putString(xxx)
.forWard();
那么如何让上述的获取 Fragment, 变成真正意义上的跳转呢?
实现步骤如下:
-
编写一个静态方法, 方法返回一个 Intent. 目标是你项目的单 Activity. 比如你的单 Activity 名称为 MainActivity
@RouterAnno( host = "module1", path = "fragment1" ) public static Intent toFragment1(@NonNull RouterRequest request) { Intent intent = new Intent(request.getRawContext(), MainActivity.class); intent.putString("fragmentFlag", "fragment1") return intent; }
-
在 MainActivity 的 onNewIntent 中统一处理 Intent
public class MainAct extends AppCompatActivity { // ......... @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); startProxyRouter(intent.getExtras()); // 拿到目标的 Fragment String fragmentFlag = intent.getStringExtra("fragmentFlag"); if (!TextUtils.isEmpty(fragmentFlag)) { Fragment fragment = Router.with(fragmentFlag) .putAll(intent.getExtras()) .navigate(); // 处理你的 fragment 进行显示 } } }
-
开始使用. 比如例子中的跳转可以写了:
Router.with(context) .host("module1") .path("fragment1") .putInt(xxx) .putString(xxx) .forWard();
-
然后你以后只要对每一个 Fragment 都写一个静态方法来描述就好了. 就可以像普通跳转 Activity 一样了.
如果对你有帮助, 请 点个 star