我的应用程序只有一个活动,有很多碎片。
在我的活动的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
是的,你可以这样做。由于支持库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();
请记住,由于setReroderingAllowed,FragmentA和FragmentB在按下FragmentC后的行为方式会有所不同。在FragmentA和FragmentB添加到堆栈后,不会对它们调用onCreateView,只会在FragmentC中调用onCreateView。对于FragmentA和FragmentB,只会调用onCreate。
您可以做的是-使用传递字符串的通知意图。在你的主要活动中,如果你收到这个字符串,就制作一个a、B和C的片段堆栈。否则,如果你没有达到目的,就继续你的流程。