【发布时间】:2014-04-28 12:50:58
【问题描述】:
我的 android 应用程序中有一项活动可以处理多个视图/片段的替换。这个活动还有一个导航抽屉来导航到顶级片段。您可以从顶级片段导航到详细级别的片段。
导航抽屉始终可以通过从左侧滑入来访问。如果当前片段是顶级片段,则导航抽屉也可以通过操作栏访问。如果当前片段是详细级别的片段,您可以通过操作栏(或按后退按钮)导航回来。
假设我有 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、.. 中有很多初始化,还启动了获取数据的任务。我想跳过这一切。只需将详细级别视图替换为尚未在后台堆栈中的新顶级视图即可。
我找不到任何解决方案来清除后台堆栈而不弹出事务。
有没有一个干净的解决方案来处理这个问题?我必须实现自己的 backstack-behavior 吗?
编辑: YouTube 应用程序的行为也是如此。当您从详细信息导航到顶层时,后台堆栈将被清除。但是他们如何在不重放片段事务的情况下清除后台堆栈呢?
感谢您的回答。
【问题讨论】:
标签: android transactions fragment back-stack