【发布时间】:2016-02-19 04:25:15
【问题描述】:
在 Android 应用中-
假设我在一个 Activity - MyActivity 中,它一次拥有一个 Fragment。
首先我将 Fragment A 加载到它(没有标签我将它添加到 FragmentManager 的后堆栈)
然后在某个时候我加载了 Fragment B(同样没有标签,我将它添加到 FragmentManager 的后堆栈)
然后在某个时候我加载了 Fragment C(同样没有标签,我将它添加到 FragmentManager 的后堆栈)
我正在使用popBackStack() 来启用后退按钮 行为,所以每当我从Fragment C 按下返回时,流程就像:
Fragment C -> Fragment B -> Fragment A -> 关闭MyActivity..
一切都很完美:-)
但是,如果我在 Fragment C 并且应用程序在后台被杀死(我使用了“设置”中的“不保留活动标志”)
并且重新上线 片段C已加载到MyActivity
但是FragmentManager的后栈只包含Fragment C..
后退按钮搞砸了
Fragment C -> 关闭 MyActivity..
为什么会这样?
如何在Activity 中正确恢复FragmentManager 的后台堆栈?
【问题讨论】:
-
这可能是因为您的活动已被终止,并且如果您愿意,它会丢失所有引用如果是,则返回堆栈,然后删除(并从您的返回堆栈中删除)如果您的活动返回堆栈不满足,则按照您的偏好进行
-
@VishalMokal 感谢您的意见。活动的后台堆栈由片段管理器管理。这意味着有不止一种方法可以将片段添加或删除到后堆栈。此外,这种解决方案不会扩展到更大的应用程序。由于我还依赖于导航片段,因此首选更基本的解决方案。
-
“我正在使用 popBackStack 启用后退按钮行为”是什么意思?如果您使用 fragmentTransaction.begin().add(fragment).addToBackStack().commit() 添加片段,Android系统是否不会自动管理返回按钮行为?
-
发布一些关于如何添加片段以及如何删除片段的代码(例如,您有 onBackPressed 方法吗?)
-
你好,你能把你的代码放在这里吗..?
标签: android android-fragments fragmentmanager