Начиная с androidx.appcompat:appcompat:1.1.0-beta01
, для перехвата кнопки возврата с компонентом навигации необходимо добавить обратный вызов к OnBackPressedDispatcher
.Этот обратный вызов должен расширять OnBackPressedCallback
и переопределять handleOnBackPressed
.OnBackPressedDispatcher
следует схеме цепочки ответственности для обработки обратных вызовов.Другими словами, если вы установите обратный вызов как enabled , будет выполняться только ваш обратный вызов.В противном случае OnBackPressedDispatcher
проигнорирует его и перейдет к следующему обратному вызову и т. Д., Пока не найдет включенный (например, это может быть полезно, когда у вас более одного обратного вызова).Подробнее об этом здесь .
Итак, чтобы показать диалог, вам нужно сделать что-то похожее на это:
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
val callback = object : OnBackPressedCallback(true /** true means that the callback is enabled */) {
override fun handleOnBackPressed() {
// Show your dialog and handle navigation
}
}
// note that you could enable/disable the callback here as well by setting callback.isEnabled = true/false
requireActivity().onBackPressedDispatcher.addCallback(viewLifecycleOwner, callback)
}
Что касаетсяКнопка, кажется, (по крайней мере, на данный момент) не так много возможностей.Единственный вариант, который я мог найти до сих пор, который использует компонент навигации, это добавить слушателя для самой навигации, который будет обрабатывать обе кнопки одновременно:позволяя активности или фрагменту, где вы добавляете слушателя, знать о назначениях, которых он, возможно, не должен.