为 One Activity Many Fragment App 构建片段堆栈

Building fragment stack for One Activity Many Fragment App

我的应用程序有只有一个activity很多片段

在我的 XML 活动中,我只有一个 FrameLayout,我在上面 replace/add/hide/show 各种片段。

假设 Fragment A 是用户打开应用程序时看到的第一个片段。

单击 Fragment A 中的内容以启动 Fragment B 并单击 Fragment B 中的内容以启动 Fragment C

所以导航可以如下图解:

片段 A --> 片段 B --> 片段 C

我想启动应用程序并直接从通知中显示 Fragment C

但是,我怎样才能提供从 Fragment C 返回的导航,因为这样点击返回会转到 Fragment B,再次单击返回转到 Fragment A

即如何注入以下堆栈结构?

片段 A <-- 片段 B <-- 片段 C

你能做的是—— 使用传递字符串的通知意图。在你的 main activity 中,如果你收到该字符串,则将 A、B 和 C 的片段堆栈。 否则,如果您不明白意图,就按原样继续您的流程。

是的,你可以做到。由于支持库 v26,您可以使用片段构建堆栈而无需大量成本。 在您的 activity 中执行以下操作:

    getSupportFragmentManager().beginTransaction()
            .replace(R.id.container, new FragmentA())
            .addToBackStack("fragmentA")
            .setReorderingAllowed(true)
            .commit();

    getSupportFragmentManager().beginTransaction()
            .replace(R.id.container, new FragmentB())
            .addToBackStack("fragmentB")
            .setReorderingAllowed(true)
            .commit();

    getSupportFragmentManager().beginTransaction()
            .replace(R.id.container, new FragmentC())
            .addToBackStack("fragmentC")
            .setReorderingAllowed(true)
            .commit();

请记住,由于 setReorderingAllowed,在按回 FragmentC 后,FragmentA 和 FragmentB 的行为方式会有所不同。 FragmentA和FragmentB入栈后不会调用onCreateView,只有在FragmentC中才会调用onCreateView。对于 FragmentA 和 FragmentB,只会调用 onCreate。