Кнопка со стрелкой назад на панели навигации Android

Я использую последние реализации JetPack для своего Android-приложения, и мне нужно условно вернуться к одному из моих фрагментов на основе логики.

Я нашел этот изящный фрагмент кода: requireActivity().onBackPressedDispatcher.addCallback(), в который я добавил свою логику.

Но это работает, только если я нажимаю кнопку возврата (физическую или виртуальную) на телефоне. Если я щелкну стрелку навигации, которая появляется вместо гамбургера при переходе, этот метод не вызывается.

Можно ли управлять и этим событием во фрагменте?

заранее спасибо


person Valerio    schedule 19.12.2019    source источник
comment
Я использовал это - ›stackoverflow.com/questions/55951871/ для одного из моих проектов.   -  person tiborK    schedule 19.12.2019
comment
@tiborK извините за опоздание. Спасибо за ваш комментарий. Не могли бы вы дать ответ с небольшими пояснениями, чтобы я мог отметить его как решенное?   -  person Valerio    schedule 23.12.2019


Ответы (1)


JetPack управляет фрагментами за вас, поэтому вам не нужно писать всю эту шаблонную логику. Дополнительную информацию о фрагментах можно найти здесь.

Как указано в этой ссылке, Компонент навигации будет отображать кнопку «Назад» для всех пунктов назначения, кроме «верхнего уровня». Вы заметили, что при нажатии на кнопку назад ничего не происходит. Вы можете создать запасной слушатель, например:

new AppBarConfiguration.Builder().setFallbackOnNavigateUpListener(listener).build()

Чтобы лучше понять, почему вам нужен резервный прослушиватель, потому что нажатие кнопки возврата вызывает NavigationUI.navigateUp (...), который вызывает NavController.navigateUp (), который пытается извлечь фрагмент из backstack. Если нечего вытолкнуть, он вернет false и будет вызван резервный слушатель.

person tiborK    schedule 26.12.2019