Как вызвать onBackPressedDispatcher?.onBackPressed() с фрагмента?
Я немного застрял в реализации onBackPressedDispatcher?.onBackPressed() в фрагменте.
У меня есть activity и fragment.
У меня есть последовательность действий во фрагменте -> когда пользователь нажимает кнопку "back", мне нужно показать диалог, где спрашивается: "Are you sure?" и после того, как пользователь нажимает "Yes", то нужно выполнть onBackPressed.
Чтобы сделать это, я сделал в моем фрагменте ->
...
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val callback = object : OnBackPressedCallback(true) {
override fun handleOnBackPressed() {
showAlertDialog(
message = getString(R.string.myText),
dialogCallback = object : AlertDialogInterface {
override fun onAlertDialogButtonClicked(alertDialog: AlertDialog?) {}
override fun onPositiveButtonClicked(alertDialog: AlertDialog?) {
isEnabled = false
alertDialog?.dismiss()
activity?.onBackPressedDispatcher?.onBackPressed()
}
override fun onNegativeButtonClicked(alertDialog: AlertDialog?) {
alertDialog?.dismiss()
}
}
)
}
}
activity?.onBackPressedDispatcher?.addCallback(
this,
callback
)
}
...
Я предполагаю, что когда пользователь нажимает "Yes" в диалоге, это тригернет ивент onPositiveButtonClicked, и чтобы выполнить onBackPressed, я вызываю эту строку -> activity?.onBackPressedDispatcher?.onBackPressed(), но это вызывает зацикливание вместо того, чтобы вернуться назад.
Что я пропустил тут?
Ответы (1 шт):
Вот так должно работать без зацикливания
override fun onPositiveButtonClicked(alertDialog: AlertDialog?) {
isEnabled = false
alertDialog?.dismiss()
callback.remove()
activity?.onBackPressedDispatcher?.onBackPressed()
}