清理后栈,用一个顶层片段替换当前片段。

问题描述 投票:5回答:1

我在我的android应用中有一个活动,它可以处理多个viewsfragments的替换。这个活动也有一个导航抽屉来导航到顶层片段。从顶层片段你可以导航到细节层片段。导航抽屉可以随时从左侧滑动进入。如果当前片段是顶层片段,导航抽屉也可以通过操作栏访问。如果当前片段是细节级片段,您可以通过操作栏(或按下后退按钮)返回导航。

假设我有3个顶层片段可以通过导航抽屉访问。fragment[1], fragment[2], fragment[3]

来自 fragment[1]您可以浏览到详细级别的 fragment[1.1].

现在用户想直接导航到顶层的 fragment[3] 从当前 fragment[1.1]. 用户只需在导航抽屉中滑动并点击项目即可。fragment[3]. 现在,如果用户点击后退按钮,应用程序应该关闭(因为它导航到了一个顶层片段)。所以,每次用户导航到一个顶层片段时,回栈应该被清除。为了检查是否应该显示抽屉指示器,我正在读取getBackStackEntryCount()-值,并与0进行比较。

作为一个总结。我想从细节级片段导航到任何顶层片段,并清除backstack。

问题是:当我通过执行以下命令来清除backstack时 getSupportFragmentManager().popBackStackImmediate(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);碎片交易是反向重放的(例如,替换了 fragment[1]fragment[1.1]). 而且我不希望它们被重放。我在onCreateView, onViewCreated, onStart, ...中有很多初始化,也有启动任务来获取数据。而我想把这些全部跳过。只需要用一个新的顶层视图替换掉细节层的视图,而这个视图在backstack中还没有。

我找不到任何解决方案来清除backstack而不弹出事务。有没有一个干净的解决方案来处理这个问题?我必须实现我自己的backstack-behavior吗?

EDIT:YouTube应用也有这样的行为。当你从细节导航到顶层时,backstack会被清除。但是他们如何在不重放碎片交易的情况下清除backstack?

谢谢您的解答。

android transactions fragment back-stack
1个回答
1
投票

我想你的问题是你在循环中弹出碎片--我猜。我通常在片段堆栈上推送片段,同时指定自定义动画--比如说从右边滑入新的片段,当弹出片段时,我们的片段会向右滑出。现在--如果你的用户已经导航到片段1,然后是1.1,然后是1.2等等,当用户点击动作栏中的主页按钮时,你想导航回1--为你的片段1事务指定一个名称。你你执行弹出使用该名称。也可以考虑使用popBackStack函数而不是popBackStackImmediate。

© www.soinside.com 2019 - 2024. All rights reserved.