java导航组件在进程死后不保留其状态

bvn4nwqk  于 2021-07-06  发布在  Java
关注(0)|答案(0)|浏览(534)

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

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题