-
Notifications
You must be signed in to change notification settings - Fork 208
单 Activity 多 Fragment
xiaojinzi123 edited this page Sep 15, 2020
·
1 revision
有一些公司的项目, 采用的架构是单 Activity, 多 Fragment 的形式.
跳转一个 Activity, 多数框架都可以支持. 但是现在市面上所有的框架, 跳转 Fragment 只是一个名词, 只是通过服务发现获取到一个 Fragment 而已.
比如下面的代码:
var 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()); 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();