Компонент навигации не сохраняет свое состояние после смерти процесса

#java #android #kotlin #android-architecture-navigation #android-navigation

#java #Android #kotlin #android-архитектура-навигация #android-навигация

Вопрос:

Я использую навигационный компонент с kotlin DSL для построения графика, и у меня странная ошибка: при первой установке приложения текущее назначение сохраняется не после смерти процесса, а только после установки. даже если я полностью закрою приложение и очищу его хранилище, проблем не возникнет, и текущее место назначения будет сохранено. но в первый раз после установки, если я нахожусь на второй странице и происходит смерть процесса, он начинается с первого пункта назначения. это код для моей деятельности:

 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
            )
        }
}
 

Ответ №1:

Попробуйте построить график следующим образом.

 if (savedInstanceState == null) {
    navController.setGraph(R.navigation.nav_graph,intent.extras)
}