Мне нужно отобразить пользовательский AlertDialog
, но только когда больше нет фрагментов после вызова NavController.navigateUp()
. Мой текущий код делает что-то похожее, но есть ошибка:
override fun onBackPressed() {
if (navController.navigateUp()) {
return
}
showQuitDialog()
}
Это несколько работает, но если я отменю AlertDialog
и не выйду из приложения, navController
уже перешел к корню NavGraph
, который не является фрагментом, в котором я находился, когда появился AlertDialog
. Итак, если я пытаюсь использовать какое-либо действие навигации из этого фрагмента, я получаю ошибку:
java.lang.IllegalArgumentException: место назначения навигации
com.example.test / actionNavigateToNextFragment неизвестен этому NavController
Эту проблему можно решить, если бы у меня был доступ к полю mBackStack
в NavController
, но это package private
, и я не могу использовать отражение в моем текущем проекте. Но если бы это было public
, я бы использовал его следующим образом:
override fun onBackPressed() {
// 2 because first one is NavGraph, second one is last fragment on the stack
if(navController.mBackStack.size > 2) {
navController.navigateUp()
return
}
showQuitDialog()
}
Есть ли способ сделать это без отражения?