gpt4 book ai didi

android - 当应用程序在后台时 fragment 实例消失

转载 作者:行者123 更新时间:2023-12-04 08:36:14 24 4
gpt4 key购买 nike

我有一个包含 DrawerLayout 和导航组件的应用程序。
Listener 设置为 NavigationItemSelectedListener 而不是 setupWithNavController 因为我想处理 Fragment 的实例而不是一遍又一遍地重新创建/替换
当我按回 fragment A 它使应用程序处于“后台模式”(这是正常的),当我返回应用程序并从 开始时 fragment A 到 fragment B 它会破坏 fragment A 和 View 模型 现在我无法通过 popBackStack() 获得该 fragment 的实例。
我注意到的是,当应用程序进入后台时,清理了 navController 的后台 ,因此,一旦我回到应用程序,我离开的 fragment ( fragment A )将在我导航到另一个 fragment 后被销毁,并且无法返回该实例。
这变得非常困难,因为我只想处理 fragment 的实例,但它只是创建了一个新 fragment 。一旦 APP 在后台,popbackStack 就找不到旧 fragment ,所以我不知道我能做什么。
如果我在导航图中从 Fragment_A 到 Fragment_B 设置一个操作,在离开应用程序并重新输入并导航到 之后 fragment _B 出现错误:无法从当前目标 NavGraph 中找到 action_fragmentA_to_fragmentB
我只是在 中有一个自定义的 onBackPressed fragment A 离开应用程序使用。

fun defaultOnBackPressed() {
if (findNavController().popBackStack().not()) {
requireActivity().moveTaskToBack(true)
} else {
findNavController().popBackStack()
}
}
我该怎么办?
自从我试图解决这个问题已经有 2 天了,但我无法解决如此复杂以至于 imo 应该很容易的事情。我已经尝试了很多解决方案。随意请求任何代码。

最佳答案

您需要更改您的 if 语句 .你是 调用 在检查 if 语句时 popBackstack() 函数会弹出。您可以将您的声明替换为:

fun defaultOnBackPressed() {
if (requireActivity().supportFragmentManager.fragments.size() == 1) {
requireActivity().moveTaskToBack(true)
} else {
findNavController().popBackStack()
}
}
或者
fun defaultOnBackPressed() {
if (requireActivity().supportFragmentManager.backStackEntryCount == 1) {
requireActivity().moveTaskToBack(true)
} else {
findNavController().popBackStack()
}
}

关于android - 当应用程序在后台时 fragment 实例消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64785666/

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