【问题标题】:OnBackPressedCallback not called in Bottom Sheet Dialog FragmentOnBackPressedCallback 未在底部工作表对话框片段中调用
【发布时间】:2020-05-15 20:24:05
【问题描述】:

我有一个Bottom Sheet Dialog Fragment,其中包含四个FragmentViewPager。 我想在onBackPressed 点击Bottom Sheet Dialog Fragment 时调用一个方法。在我的OnCreateView 中实现了OnBackPressedCallback,但它没有被触发。有人知道为什么不调用它吗?

val callback = object : OnBackPressedCallback(true */ true means that the callback is enabled /*) {
    override fun handleOnBackPressed() {
        // Show your dialog and handle navigation
        LogUtils.d("Bottom Sheet -> Fragment BackPressed Invoked")
    }
}

// note that you could enable/disable the callback here as well by setting callback.isEnabled = true/false
requireActivity().onBackPressedDispatcher.addCallback(viewLifecycleOwner, callback)

【问题讨论】:

标签: android android-fragments bottom-sheet onbackpressed


【解决方案1】:

我在寻找 DialogFragment 中存在的相同问题的解决方案时发现了这个线程。答案在上面的 cmets 中,但为了完整起见,这里是汇总的信息:

解决方案

在您的 DialogFragment 中覆盖 onCreateDialog 并设置 OnKeyListener:

override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
        return super.onCreateDialog(savedInstanceState).apply {
            setOnKeyListener { _: DialogInterface, keyCode: Int, keyEvent: KeyEvent ->
                if (keyCode == KeyEvent.KEYCODE_BACK && keyEvent.action == KeyEvent.ACTION_UP) {

                    // <-- Your onBackPressed logic here -->

                    return@setOnKeyListener true
                }
                return@setOnKeyListener false
            }
        }
    }

说明

来自针对 requireActivity().onBackPressedDispatcher.addCallback 的问题不适用于 DialogFragments (https://issuetracker.google.com/issues/149173280):

对话框是始终位于活动窗口上方的单独窗口。这意味着无论底层 FragmentManager 处于什么状态,或者您在 Activity 的 onBackPressed() 中运行什么代码(OnBackPressedDispatcher 插入的位置),对话框都将继续拦截系统后退按钮。

在使用任何使用对话框的组件时,onBackPressedDispatcher 本质上是错误的工具,因为它们在应用程序中的行为方式以及在活动之外(顶部)存在的方式。

【讨论】:

    猜你喜欢
    • 2018-09-22
    • 2020-02-28
    • 2020-08-02
    • 2021-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多