首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DialogFragment忽略OnBackPressedDispatcher

DialogFragment忽略OnBackPressedDispatcher
EN

Stack Overflow用户
提问于 2019-07-23 16:39:20
回答 2查看 1.3K关注 0票数 7

我正在尝试使用'androidx.activity:activity-ktx:1.1.0-alpha01''androidx.fragment:fragment-ktx:1.2.0-alpha01'来处理BottomSheetDialogFragment中的后退按钮,这是一个DialogFragment

handleOnBackPressed()不会被调用,并且DialogFragment会被关闭。按下后退按钮时,OnBackPressedCallback将启用。

我认为DialogFragment正在拦截back按钮的按下,因为ComponentActivity从不调用mOnBackPressedDispatcher.onBackPressed();

有没有一种方法可以覆盖后退按钮的DialogFragment处理?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-07-23 17:05:45

我找到了一个解决方案,但我希望这个库能处理这个用例。

创建自定义BottomSheetDialog

代码语言:javascript
复制
class BackPressBottomSheetDialog(context: Context, @StyleRes theme: Int, 
private val callback: BackPressBottomSheetDialogCallback) :
        BottomSheetDialog(context, theme) {

    override fun onBackPressed() {
        if (callback.shouldInterceptBackPress()) callback.onBackPressIntercepted()
        else super.onBackPressed()
    }
}

及其interface

代码语言:javascript
复制
interface BackPressBottomSheetDialogCallback {
    fun shouldInterceptBackPress(): Boolean
    fun onBackPressIntercepted()
}

然后在你的BottomSheetDialogFragment

代码语言:javascript
复制
private val dialogCallback = object : BackPressBottomSheetDialogCallback {
      override fun shouldInterceptBackPress(): Boolean {
        //TODO should you intercept the back button?
      }

      override fun onBackPressIntercepted() {
        //TODO what happens when you intercept the back button press
      }
}

override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
    return BackPressBottomSheetDialog(requireContext(), theme, dialogCallback)
}
票数 3
EN

Stack Overflow用户

发布于 2020-01-15 17:04:19

这真的很难理解Google Android Dev做了什么。无论如何,我找到了一个不使用接口的解决方案。

代码语言:javascript
复制
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
    return object : Dialog(requireContext(), theme) {
        override fun onBackPressed() {
            // handle back press
        }
    }
}

只需覆盖onCreateDialog和其中的onBackPressed即可。

票数 18
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57160036

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档