我正在使用 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/