Я пытаюсь протестировать функцию «прогнозируемого жеста назад», реализованную в Android 13.
Чтобы сделать это, сначала я перенес свое приложение на API AndroidX (поэтому избавился от всех случаев использования onBackPressed), затем включил эту функцию в манифесте и попробовал на Pixel 4a с установленным Android 13 — не сработало.
Провел небольшое расследование и, наконец, добрался до работать, удалив все обратные вызовы onBackPressed в onBackPressedDispatcher.
Мой вопрос: как заставить эту функцию работать, зарегистрировав обратные вызовы onBackPressed в приложении?
Обновление:
abstract class BaseFragment : Fragment() {
private val onBackPressedCallback = object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
onBackPressed()
}
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
requireActivity().onBackPressedDispatcher.addCallback(viewLifecycleOwner, onBackPressedCallback)
}
// If there are no more items in backstack, `navController.navigateUp()`
// closes the app, which is desired behavior. It's triggered via callback though,
// so, as I understand, that's the reason predictive back gesture doesn't work.
protected open fun onBackPressed() {
if (!navigateUp()) {
onBackPressedCallback.isEnabled = false
requireActivity().onBackPressedDispatcher.onBackPressed()
}
}
// I can override this method in places, where I need to use custom backPressed logic
protected open fun navigateUp(): Boolean = navController.navigateUp()
}
Подробнее здесь: https://stackoverflow.com/questions/736 ... it-to-work