构建一个活动许多片段应用程序的片段堆栈

时间:2016-05-19 04:28:39

标签: android android-fragments stack android-notifications up-navigation

我的应用只有一项活动大量片段

在我的activty的XML中,我只有一个FrameLayout,我可以替换/添加/隐藏/显示各种片段。

想象一下Fragment A是用户打开应用时看到的第一个片段。

点击Fragment A中的内容即可启动Fragment B并点击Fragment B中的内容即可启动Fragment C

因此导航可以说明如下:

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

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

但是,如何从Fragment C提供反向导航,因此点击返回Fragment B然后再次点击返回Fragment A

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

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

2 个答案:

答案 0 :(得分:1)

你能做的是 - 使用传递字符串的通知意图。在主活动中,如果收到该字符串,则创建A,B和C的片段堆栈。 否则,如果你没有得到意图,只需按原样继续你的流程。

答案 1 :(得分:1)

是的,你可以这样做。从支持库v26开始,您可以使用片段构建堆栈而无需大量成本。 在您的活动中,请执行以下操作:

    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,FragmentA和FragmentB在按回FragmentC后会表现得有点不同。将FragmentA和FragmentB添加到堆栈后,不会调用onCreateView,只会在FragmentC中调用onCreateView。对于FragmentA和FragmentB,只会调用onCreate。