我在我的Android应用程序中有一个活动,处理多个视图/片段的替换。该活动还具有导航抽屉,可导航到顶级片段。从顶级片段,您可以导航到详细级别的片段。
可以通过从左侧滑动来始终访问导航抽屉。如果当前片段是顶级片段,则也可以通过操作栏访问导航抽屉。如果当前片段是详细级别的片段,则可以通过操作栏(或按下返回按钮)导航回去。
假设我有3个可以通过导航抽屉访问的顶级片段。
现在用户想要直接从当前的
现在,如果用户按下返回按钮,则应用程序应关闭(因为它导航到了顶级片段)。因此,每次用户导航到顶级片段时,后退堆栈都应该被清除。为了检查是否应该显示抽屉指示器,我正在读取getBackStackEntryCount()值并将其与0进行比较。
总之,我想从详细级别的片段导航到任何顶级片段并清除后退堆栈。
问题是:
当我通过执行
我找不到清除后退堆栈而不弹出事务的解决方案。
有没有干净的解决此问题的方法?我必须实现自己的后退堆栈行为吗?
编辑: YouTube应用程序也是这样运作的。当您从详细信息导航到顶级时,后退堆栈会被清除。但是他们如何清除后退堆栈而不重播片段事务?
感谢您的答案。
可以通过从左侧滑动来始终访问导航抽屉。如果当前片段是顶级片段,则也可以通过操作栏访问导航抽屉。如果当前片段是详细级别的片段,则可以通过操作栏(或按下返回按钮)导航回去。
假设我有3个可以通过导航抽屉访问的顶级片段。
fragment[1]
,fragment[2]
,fragment[3]
从fragment[1]
,您可以导航到详细级别的fragment[1.1]
。现在用户想要直接从当前的
fragment[1.1]
导航到顶级fragment[3]
。用户只需滑动导航抽屉并单击fragment[3]
项即可。现在,如果用户按下返回按钮,则应用程序应关闭(因为它导航到了顶级片段)。因此,每次用户导航到顶级片段时,后退堆栈都应该被清除。为了检查是否应该显示抽屉指示器,我正在读取getBackStackEntryCount()值并将其与0进行比较。
总之,我想从详细级别的片段导航到任何顶级片段并清除后退堆栈。
问题是:
当我通过执行
getSupportFragmentManager().popBackStackImmediate(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
来清除后退堆栈时,片段事务会以相反的方式重播(例如,fragment[1]
被fragment[1.1]
替换)。而我不希望它们重播。我在onCreateView,onViewCreated,onStart中有很多初始化等,还要开始任务来获取数据。我想跳过所有这些。只需用尚未在后退堆栈中的新顶级视图替换详细级别视图即可。我找不到清除后退堆栈而不弹出事务的解决方案。
有没有干净的解决此问题的方法?我必须实现自己的后退堆栈行为吗?
编辑: YouTube应用程序也是这样运作的。当您从详细信息导航到顶级时,后退堆栈会被清除。但是他们如何清除后退堆栈而不重播片段事务?
感谢您的答案。