如何解决当应用程序在后台运行时,片段实例会消失
我有一个包含DrawerLayout和Navigation Component的应用程序。
使用NavigationItemSelectedListener而不是setupWithNavController设置监听器,因为我想处理Fragment的实例,而不是一遍又一遍地创建/替换
当我按回片段A 时,它使应用程序处于“后台模式”(正常),并且当我返回应用程序并从片段A转到片段B 会破坏 FRAGMENT A和VIEWMODEL ,现在我无法通过popBackStack()获取该片段的实例。
我注意到的是,当应用程序在后台运行时,navController的后台堆栈已清理,因此,一旦我回到应用程序中,我剩下的片段(片段A )将在我导航到另一个片段并且无法找回该实例时被销毁。
这变得非常困难,因为我只想处理片段的实例,但是它只是创建一个新的片段。而且一旦APP进入后台,popbackStack就找不到旧片段,所以我不知道该怎么办。
如果我在导航图中从Fragment_A设置为Fragment_B,则在离开应用并重新进入并导航到 Fragment_B 后,会出现错误: action_fragmentA_to_fragmentB从当前目标NavGraph找到
我只是在片段A 中有一个自定义onBackPressed,以使应用程序保持使用状态。
fun defaultOnBackPressed() {
if (findNavController().popBackStack().not()) {
requireActivity().moveTaskToBack(true)
} else {
findNavController().popBackStack()
}
}
我该怎么办?
距离我尝试解决这一问题已经过去了2天,但我无法解决如此复杂的问题,以至于imo应该很容易。我尝试了很多解决方案。随时请求任何代码。
解决方法
您需要更改 if声明。您正在检查语句是否弹出时,正在调用 popBackstack()函数。您可以将您的陈述替换为:
# Roots
spring:
cloud:
gateway:
httpclient:
wiretap: true
httpserver:
wiretap: true
routes:
- id: kibana
uri: http://localhost:5601/
predicates:
- Path=/**
或
fun defaultOnBackPressed() {
if (requireActivity().supportFragmentManager.fragments.size() == 1) {
requireActivity().moveTaskToBack(true)
} else {
findNavController().popBackStack()
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。