Короткий ответ
Невозможно перехватить onBackPressed
обратный вызов внутри Fragment
без добавления дополнительного кода внутри хостинга Activity
.Это просто не реализовано в Android SDK
.Просто остановитесь.
Оригинальный ответ
В классе Fragment
не существует такой вещи, как onBackPressed
обратный вызов.Но вы можете реализовать это сами:
Создать интерфейс:
interface FragmentOnBackPressedListener {
fun onBackPressed()
}
Теперь в вашей деятельности:
override fun onBackPressed() {
// find top fragment
val currentFragment = supportFragmentManager
.findFragmentById(R.id.your_nav_host_fragment_id)?.let {
it.childFragmentManager.fragments.getOrNull(0)
}
// check if it implements FragmentOnBackPressedListener
if (currentFragment is FragmentOnBackPressedListener ) {
// if it does, transfer flow to the fragment
return currentFragment.onBackPressed()
}
// if it doesn't, apply default behaviour
super.onBackPressed()
}
Затем в вашем фрагменте:
class ExampleFragment : Fragment(), FragmentOnBackPressedListener {
override fun onBackPressed() {
// close your drawer layout here if visible
// Also: to close fragment, invoke
// findNavController().navigateUp() or findNavController().popBackStack()
}
}