我的Android应用程序中有一个活动处理多个视图/片段的替换。此活动还有一个导航抽屉,可导航到顶级片段。从顶级片段中,您可以导航到详细级别的片段 可以通过从左侧滑入导航抽屉来访问导航抽屉。如果当前片段是顶级片段,则操作栏也可以访问导航抽屉。如果当前片段是详细级别片段,您可以返回操作栏(或按后退按钮)。
假设我有3个可以通过导航抽屉访问的顶级片段
fragment[1]
,fragment[2]
,fragment[3]
从fragment[1]
,您可以导航到详细级别fragment[1.1]
。
现在,用户想要从当前fragment[3]
直接导航到顶级fragment[1.1]
。用户只需在导航抽屉中滑动,然后单击fragment[3]
的项目
现在,如果用户点击后退按钮,应用程序应该关闭(因为它导航到顶级片段)。因此,每次用户导航到顶级片段时,都应清除堆栈。为了检查我是否应该显示抽屉指示器,我正在读取getBackStackEntryCount() - 值并将其与0进行比较。
作为总结。我想从细节级别的片段导航到任何顶级片段并清除后台堆栈。
问题:
当我通过执行
清除后台堆叠时
getSupportFragmentManager().popBackStackImmediate(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
,
片段事务反向重放(例如fragment[1]
替换fragment[1.1]
)。而且我不希望他们被重播。我在onCreateView,onViewCreated,onStart,..上有很多初始化,也开始获取数据的任务。我想跳过这一切。只需用一个新的顶级视图替换详细级别视图,该顶级视图已经不在后台堆栈中。
在没有弹出交易的情况下,我找不到任何清除后台堆的解决方案 有没有一个干净的解决方案来处理这个问题?我是否必须实施自己的后台行为?
修改 YouTube应用也表现得像这样。当您从详细信息导航到顶级时,后端堆栈将被清除。但是如何在不重放片段事务的情况下清除后台堆栈?
感谢您的回答。
答案 0 :(得分:1)
我认为你的问题是你在循环中弹出片段 - 我想。我通常会在片段堆栈上推送片段以及指定自定义动画 - 例如从右侧滑动新片段,当弹出它时我们向右滑动。现在 - 如果您的用户导航到片段1然后1.1然后1.2等,并且当用户单击操作栏中的主页按钮时您想要导航回1 - 为片段1事务指定名称。您执行弹出的人使用该名称。另外考虑使用popBackStack函数而不是popBackStackImmediate。