Навигация Android — подтверждение навигации пользователя

#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. в итоге я заблокировал (отключил) ящик с этого экрана, поскольку это было на самом деле лучше для моего случая.