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