android - 屏幕旋转后无法 popBackStack()。安卓导航组件

标签 android android-architecture-navigation

我正在使用 NavController:Navigation.findNavController(activity, R.id.statistic_host_fragment)。一切都很好,直到我旋转我的设备,然后我不能 navigate()popBackStack()

在日志中: FragmentNavigator:忽略 popBackStack() 调用:FragmentManager 已经保存了它的状态并且 FragmentNavigator:忽略 navigate() 调用:FragmentManager 已保存其状态

当我看到 Google Sample 时,他们没有解决这个问题,一切正常。所以我不明白这是问题所在。

此外,当我使用 MVVM 时,我将 navController 保存在 viewModel 中,并在 onCreate() 之后在 viewModel 中重新初始化 Controller 。它在旋转后解决了 navigate() 问题,但我仍然不能 popBackStack()。之后我尝试使用 Navigation.setViewNavController() 但它不起作用。

val destId = currentController.currentDestination?.id

    if (destId != R.id.wikiFragment && destId != R.id.statisticsFragment && destId != R.id.trackerFragment)
        currentController.navigateUp()

在 HomeActivity 中:

override fun onBackPressed() {
    if (vm.currentController.graph.startDestination == vm.currentController.currentDestination?.id) {
        super.onBackPressed()
    } else {
        vm.currentController.popBackStack()
    }
}

所有来源:https://github.com/SuperCatDev/OverHub/tree/feature/maps

最佳答案

通过从 ViewModel 中提取所有 NavController 并且从不保留 NavController 实例来解决问题。仅在需要访问时才使用 getter 方法。

关于android - 屏幕旋转后无法 popBackStack()。安卓导航组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55017961/

相关文章:

java - 使用 NavigationComponent 在另一个 DialogFragment 的 navBackStackEntry 观察者结果中显示 DialogFragment

android - 使用 android 导航组件获取 Backstack 状态

android - 隐藏 fragment 留下空白

Android 上的 Android 蓝牙交叉传输 key 派生支持

android - 如何在导航架构组件中实现条件导航

android - 导航图不会在深度链接中使用默认参数

android - 谁能帮我从 png 图像创建 9 个补丁图像?

android - 连接到本地主机的 HttpURLConnection 在 Android 7 上有效,但在 Android 10 上无效

android - 为什么Camera需要在onPause()方法而不是Activity的onstop()方法中释放?

android - 禁止在导航架构组件中将 fragment 添加到后台堆栈