检测返回按钮,但不要关闭对话框片段

102

我有一个DialogFragment用于浮动对话框,其中包括一个特殊的键盘,当用户在EditText字段内按下时弹出(正常IME被阻止显示)。

我希望键盘在用户按下返回按钮时关闭(visibility = GONE),但对话框仍然可见,就像普通的IME服务一样。然而,据我所知,从我在SO和其他地方的相当广泛的阅读中,似乎没有办法做到这一点。

如果我将对话框设置为不可取消,则因为对话框不可取消,我不会收到onCancel()或onDismiss()的通知。

如果我将对话框设置为可取消,则会收到通知,但对话框将被关闭。

我无法在片段中的对话框中附加onKeyListener,因为系统会替换它,以便片段可以处理对话框的生命周期。

有没有办法做到这一点?或者对于片段系统的目的,是否已经完全封锁了键事件的检测权限?

15个回答

1

使用DialogFragment的onDismiss()回调和closeActivity标志

private var closeActivity: Boolean = true    

override fun onDismiss(dialog: DialogInterface?) {
        super.onDismiss(dialog)

        if (closeActivity) {
            activity!!.finish()
        }
    }

0

您可以重写onDismiss方法来检测后退事件

override fun onDismiss(dialog: DialogInterface) {
    super.onDismiss(dialog)

    // ... Do whatever you want
}

0

这里有点棘手,因为在对话框片段上我们没有任何监听器或回调函数。一种方法是重写onDismiss(),它将作为系统回调工作,告诉我们对话框已解除,并根据此设置自己的自定义回调,如下所示。

override fun onDismiss(dialog: DialogInterface) {
    super.onDismiss(dialog)
    debugLog("Dialog is dismissed")
    dismiss()
    listener?.onRemoteBackPressed()
}

0
使用最新的androidx支持库,我们可以使用BackPressedDispatcher来关闭对话框片段。在对话框片段类中添加以下代码来关闭对话框。
参考Android文档:Refer Android Doc
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    requireActivity().getOnBackPressedDispatcher().addCallback(this, new OnBackPressedCallback(true) {
        @Override
        public void handleOnBackPressed() {
            dismiss();
        }
    });

}

-1

3
似乎不是这种情况:https://issuetracker.google.com/issues/149173280 - jpmcosta

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接