我正在尝试处理BottomSheetDialogFragment
中的后退按钮,这是一个DialogFragment
,使用'androidx.activity:activity-ktx:1.1.0-alpha01'
和'androidx.fragment:fragment-ktx:1.2.0-alpha01'
。
不调用handleOnBackPressed()
,并且DialogFragment
被解除。按下后退按钮时启用OnBackPressedCallback
。
我认为DialogFragment
拦截了后退按钮的按下,因为ComponentActivity
从不调用mOnBackPressedDispatcher.onBackPressed();
是否有办法覆盖DialogFragment
对后退按钮按下的处理?
4条答案
按热度按时间dly7yett1#
这真的很难理解谷歌Android开发使.无论如何,我发现了一个解决方案,不使用接口.
只需重写onCreateDialog并重写其中的onBackPressed即可。
jucafojl2#
我找到了一个解决方案,但我希望图书馆会照顾这个usecase。
创建自定义
BottomSheetDialog
:它的
interface
然后在
BottomSheetDialogFragment
中mjqavswn3#
我对Kotlin的解决方案是:
覆盖
BottomSheetDialogFragment
中的以下方法。uujelgoq4#
还有一个解决方案:
解释
向后按下事件传递到
DialogFragment
的dialog
,因此您应该为dialog
注册OnBackpressedCallback
。禁用回调(
isEnabled = false
)允许您防止使用下一个back-pressed事件。一旦禁用回调,您将重新触发back-pressed事件(调用requireActivity().onBackPressed()
),它将被其他人使用,例如,您的导航将弹出返回堆栈。之后,您应该启用回调(
isEnabled = true
)以接收下一个按下鼠标的事件。