单击底部导航项目时,是否可以使我的导航组件不创建新片段(而是使用现有片段)?
我只想使用导航组件。
binding.bottomNavBar.setOnNavigationItemSelectedListener {
when (it.itemId) {
R.id.currentWeatherFragment -> {
navController.popBackStack(R.id.currentWeatherFragment, false)
return@setOnNavigationItemSelectedListener true
}
R.id.futureListWeatherFragment -> {
if (futureNumber > 0) {
Log.d("test", "popbackstack")
navController.popBackStack(R.id.futureListWeatherFragment, false)
} else {
navController.navigate(navController.graph.findNode(R.id.futureListWeatherFragment)!!.id)
futureNumber++
Log.d("test", "navigate")
}
return@setOnNavigationItemSelectedListener true
}
R.id.settingsFragment -> {
if (settingsNumber > 0) {
navController.popBackStack(R.id.settingsFragment, false)
} else {
navController.navigate(navController.graph.findNode(R.id.settingsFragment)!!.id)
settingsNumber++
}
return@setOnNavigationItemSelectedListener true
}
}
false
}
答案 0 :(得分:0)
恐怕暂时不可能。由于导航组件仍处于测试阶段,很遗憾,它缺乏适应所有情况的能力。
一种解决方案是将所有数据保留在视图模型中,并在每次navcontroller创建片段的新实例时使用此数据。这样,您可以保留已获取的数据。另外,您的业务逻辑将与UI逻辑分离,因此您的数据也可以在配置更改后幸免。
有关Viewmodels here
的更多信息