gpt4 book ai didi

android - 清除后台堆栈并用顶级 fragment 替换当前 fragment

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:15:07 26 4
gpt4 key购买 nike

我的 Android 应用程序中有一项 Activity 可处理多个 View /fragment 的替换。此 Activity 还有一个抽屉导航,用于导航到顶级 fragment 。您可以从顶级 fragment 导航到详细 fragment 。
始终可以通过从左侧滑入来访问抽屉导航。如果当前 fragment 是顶级 fragment ,抽屉导航也可以通过操作栏访问。如果当前 fragment 是细节级 fragment ,您可以通过操作栏(或按后退按钮)向后导航。

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

fragment[1],您可以导航到详细级别 fragment[1.1]

现在用户想要从当前 fragment[1.1] 直接导航到顶级 fragment[3]。用户只需在抽屉导航中滑动并单击 fragment[3] 的项目。
现在,如果用户点击后退按钮,应用程序应该关闭(因为它导航到顶级 fragment )。因此,每次用户导航到顶级 fragment 时,都应清除后台堆栈。为了检查我是否应该显示抽屉指示器,我正在读取 getBackStackEntryCount() 值并将其与 0 进行比较。

作为总结。我想从细节级 fragment 导航到任何顶级 fragment 并清除后台堆栈。

问题:
当我通过执行
清除后台堆栈时getSupportFragmentManager().popBackStackImmediate(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);,
fragment 事务被反向重放(例如,将 fragment[1] 替换为 fragment[1.1])。而且我不希望它们被重播。我在onCreateView,onViewCreated,onStart,..中有很多初始化,还启动了获取数据的任务。我想跳过这一切。只需将详细级别 View 替换为一个新的顶层 View ,该顶层 View 还不在后台堆栈中。

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

编辑:YouTube 应用程序的行为也是如此。当您从细节导航到顶层时,后台堆栈将被清除。但是他们如何在不重放 fragment 事务的情况下清除后台堆栈?

感谢您的回答。

最佳答案

我认为你的问题是你在循环中弹出 fragment - 我猜。我通常将 fragment 插入 fragment 堆栈并指定自定义动画 - 比如说从右侧滑入新 fragment ,弹出它时我们会向右滑出。现在 - 如果您的用户已导航到 fragment 1,然后是 1.1,然后是 1.2 等,并且您希望在用户单击操作栏中的主页按钮时导航回 1 - 为您的 fragment 1 事务指定一个名称。您执行弹出操作时使用该名称。还可以考虑使用 popBackStack 函数而不是 popBackStackImmediate。

关于android - 清除后台堆栈并用顶级 fragment 替换当前 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23341648/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com