我的应用只有一项活动和大量片段。
在我的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
答案 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。