#android #android-dialogfragment #android-architecture-components
Вопрос:
У меня есть график навигации по диалогам, который отлично работает, если я не закрываю диалоги при переходе к другому. Но затем диалоговое окно, из которого я перемещаюсь, не исчезает с экрана. Если я отклоню их во время навигации, приложение выйдет из строя.
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
val navHostFragment = activity?.supportFragmentManager?.findFragmentById(R.id.dialogNavigation) as NavHostFragment
val navController = navHostFragment.navController
super.onViewCreated(view, savedInstanceState)
binding.btnNext.setOnClickListener{
navController.navigate(R.id.action_retryConnectionDialog_to_batteryDialog)
dismiss()
}
}
Это часть кода (в рамках RetryConnectionDialog.kt), которая вызывает такие реакции, любая информация будет оценена по достоинству
Ответ №1:
Если вы хотите, чтобы закрыть диалоговое окно при перемещении на новое место, вы должны сделать это как часть ваших navigate()
действий при использовании popUpTo
на вашей action_retryConnectionDialog_to_batteryDialog
— dismiss
это асинхронная операция, которая бывает только после вашего navigate()
вызова, что означает, что это слишком поздно, чтобы удалить его из заднего стека (как новый BatteryDialog
уже уложенные поверх него).
<action
android:id="@ id/action_retryConnectionDialog_to_batteryDialog"
app:destination="@id/batteryDialog"
app:popUpTo="@ id/retryConnectionDialog"
app:popUpToInclusive="true"/>
Ответ №2:
В зависимости от навигационного графика, который не был предоставлен, это может быть скорее:
navController.navigateUp()
navController.navigate(R.id.action_retryConnectionDialog_to_batteryDialog)
Комментарии:
1. Позвонив
navigateUp()
, вы синхронно вернетесь к предыдущему пункту назначения. Это означает, что любые действия, подобныеaction_retryConnectionDialog_to_batteryDialog
тем, которые связаны сretryConnectionDialog
тем, что они больше не становятся доступными, поэтому этот подход не работает (и это именно тоpopUpTo
, для чего он предназначен).