#android #androidx #android-navigation
#Android #androidx #android-навигация
Вопрос:
Я использую навигационный компонент AndroidX для навигации по фрагментам внутри моего приложения. У меня есть сценарий, когда мне нужно спросить пользователя, действительно ли он хочет покинуть страницу или остаться. Я могу сделать это легко для дальнейшей навигации — просто покажите AlertDialog и перейдите на позитив. Тем не менее, у меня есть реальные проблемы с остановкой возврата пользователя с помощью кнопки «Назад» или использования ящика для навигации в другом месте. Также не удалось найти ничего полезного, например, навигационные прослушиватели. Как перехватить попытки навигации внутри фрагмента навигации?
Ответ №1:
Как говорится в этом документе, вы можете добавить обратный onBackPressedDispatcher
вызов и изменить поведение при обратном нажатии:
val callback = onBackPressedDispatcher.addCallback(this) {
AlertDialog.Builder(this@Activity)
.setMessage("Are you sure?")
.setPositiveButton(android.R.string.ok, DialogInterface.OnClickListener { _, _ ->
handleOnBackPressed()
})
.setNegativeButton(android.R.string.cancel, null)
.create()
.show()
}
Комментарии:
1. обрабатывает ли он навигацию из ящика?
2. @NapoleonTheCake, если вы настроили NavigationDrawer с помощью NavController, как описано здесь , нет, нет способа переопределить поведение по умолчанию. Я предлагаю вам использовать навигацию здесь вручную, через прослушиватели, и выполнять те же действия, что и при нажатии назад.
3. в итоге я заблокировал (отключил) ящик с этого экрана, поскольку это было на самом деле лучше для моего случая.