单次返回按钮按下时关闭对话框和活动。

10

我正在活动开始时使用以下代码显示对话框:

mDialog.setCanceledOnTouchOutside(false);
用户按下返回按钮时,首先关闭对话框,然后再次按下返回按钮,它将关闭活动。我希望只需单个返回按键,即可关闭对话框和活动。 我已经尝试使用以下代码:
@Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        // TODO Auto-generated method stub
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            // AppDialogUtils.mDialog.setCancelable(true);
            // AppDialogUtils.mDialog.dismiss();
            mActivity.finish();
        }
        return super.onKeyDown(keyCode, event);
    }
6个回答

22

在监听器中设置mDialog.setOnCancelListener(listener)并关闭Activity

@Override
mDialog.setOnCancelListener(new OnCancelListener() {

    public void onCancel(DialogInterface interface) {
        this.finish();            
    }
});

你也可以为你的 Dialog 使用一个 OnKeyListener

mDialog.setOnKeyListener(new Dialog.OnKeyListener() {

        @Override
        public boolean onKey(DialogInterface interface, int keyCode,
                KeyEvent event) {
            if (keyCode == KeyEvent.KEYCODE_BACK) {
                this.finish();
            }
            return true;
        }
    });

4

使用 OnCancelListener

alertDialog.setOnCancelListener(new OnCancelListener() {

    public void onCancel(DialogInterface dialog) {
        // finish activity             
    }
});

1
确保您已设置mDialog.setCancelable(true),然后设置。
mDialog.setOnCancelListener {
                    this.finish()
                }

注意:这是用于setOnCancelListener的lambda函数。

-1

这可能适合你。

首先,我不认为这个有效。

mDialog.setCanceledOnTouchOutside(false);

你可以使用

dialog.setCancelable(false);

现在它按照你的要求工作了。


-1

如果你的对话框已经打开

dialog.dismiss();

这将关闭您的对话框,如果您想要按返回,则使用此行

@Override
 public void onBackPressed() {
 super.onBackPressed();
   finish();
 }

这个对你会起作用


-2
重载活动的 onBackPressed() 事件,并在同一函数中关闭对话框和活动。
@Override
public void onBackPressed() {
   dialog.dismiss();
   finish();
}

1
这是非常糟糕的解决方案,因为你必须在活动中保留 dialog 对象,而且很容易出现 NPE。标记为低质量。 - Damian Kozlak

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