Как вызвать 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 шт):

Автор решения: Eugene Krivenja

Вот так должно работать без зацикливания

override fun onPositiveButtonClicked(alertDialog: AlertDialog?) {
    isEnabled = false
    alertDialog?.dismiss()
    callback.remove()
    activity?.onBackPressedDispatcher?.onBackPressed()
}
→ Ссылка