我正在使用kotlin dsl的导航组件来构建这个图,我有一个奇怪的bug,应用程序第一次安装当前目的地并不是在进程死后保留的,而是在安装之后保留的。即使我完全关闭应用程序,并清除其存储没有问题,当前的目的地是保留。但是在安装之后的第一次,如果我在第二页并且进程死机发生,它从第一个目标开始。这是我的活动代码:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
configNavigation()
...
}
private fun configNavigation() {
val navHosFragment = supportFragmentManager.findFragmentById(R.id.fragment_container) as
NavHostFragment
navHosFragment.navController.apply {
graph = createGraph(
navGraph.id,
navGraph.dest.places,
GraphBuilder(applicationContext).builder
)
}
val appBarConfiguration = AppBarConfiguration(navHosFragment.navController.graph)
placesToolbar.setupWithNavController(navHosFragment.navController, appBarConfiguration)
}
这是我的第二个目标viewmodel的代码
@AssistedInject.Factory
interface Factory {
fun create(savedStateHandle: SavedStateHandle): DetailsViewModel
}
private val id = savedStateHandle.get<String>("ID") ?: ""
init {
getDetails(id)
}
我试着只在 savedInstanceState
与下面的代码一样为null,因为文档中说navgraph在配置更改和进程终止时被保留,但它给了我一个异常 getGraph()
必须在 setGraph
“这意味着图形不会被保留。
if (savedInstanceState == null) {
navHosFragment.navController.apply {
graph = createGraph(
navGraph.id,
navGraph.dest.places,
GraphBuilder(applicationContext).builder
)
}
}
暂无答案!
目前还没有任何答案,快来回答吧!