我正在尝试使用'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处理?
发布于 2019-07-23 17:05:45
我找到了一个解决方案,但我希望这个库能处理这个用例。
创建自定义BottomSheetDialog
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
interface BackPressBottomSheetDialogCallback {
fun shouldInterceptBackPress(): Boolean
fun onBackPressIntercepted()
}然后在你的BottomSheetDialogFragment中
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)
}发布于 2020-01-15 17:04:19
这真的很难理解Google Android Dev做了什么。无论如何,我找到了一个不使用接口的解决方案。
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
return object : Dialog(requireContext(), theme) {
override fun onBackPressed() {
// handle back press
}
}
}只需覆盖onCreateDialog和其中的onBackPressed即可。
https://stackoverflow.com/questions/57160036
复制相似问题