为 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。
我的应用程序有只有一个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。