如何从片段调用onBackPressedDispatcher?.onBackPressed()?

问题描述 投票:0回答:1

我在片段中

onBackPressedDispatcher?.onBackPressed()
的实现上有点卡住了

我里面有一个 Activity 和 Fragment

我在片段中有一个流程 -> 当用户单击后退按钮时,我需要显示一个对话框,询问“您确定吗?”一旦用户单击“是”,我就必须返回。

因此,为了做到这一点,我在我的片段中做了 ->

...
    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
        )
    }
...

因此,我假设一旦用户在对话框上单击“是”,就会触发此事件

onPositiveButtonClicked
,并且为了进一步传递此事件,我调用此行 ->
activity?.onBackPressedDispatcher?.onBackPressed()
,但它会转一个圈。

我在这里缺少什么?

android kotlin onbackpressed
1个回答
0
投票

最后是这样解决的:

override fun onPositiveButtonClicked(alertDialog: AlertDialog?) {
    isEnabled = false
    alertDialog?.dismiss()
    callback.remove()
    activity?.onBackPressedDispatcher?.onBackPressed()
}

一旦不再需要回调,可以将其删除

© www.soinside.com 2019 - 2024. All rights reserved.