如何在对话框中处理后退按钮?

时间:2012-04-27 06:46:08

标签: android button dialog back

我正在开发一个应用程序,当按下按钮时,它会打开一个带有OK和Cancel按钮的对话框。

工作正常。

当用户按下后退按钮时,我按照以下方式处理

public boolean onKeyDown(int keyCode, KeyEvent event) 
{
    if ((keyCode == KeyEvent.KEYCODE_BACK)) 
    {

    }
 return super.onKeyDown(keyCode, event);
}

但是没有调用上面的方法。我怎么处理这个?

8 个答案:

答案 0 :(得分:221)

dialog.setOnKeyListener(new Dialog.OnKeyListener() {

            @Override
            public boolean onKey(DialogInterface arg0, int keyCode,
                    KeyEvent event) {
                // TODO Auto-generated method stub
                if (keyCode == KeyEvent.KEYCODE_BACK) {
                    finish();
                    dialog.dismiss();
                }
                return true;
            }
        });

答案 1 :(得分:111)

您希望在创建对话框时设置OnCancelListener。它看起来像这样:

dialog.setOnCancelListener(new DialogInterface.OnCancelListener() {         
    @Override
    public void onCancel(DialogInterface dialog) {
        //do whatever you want the back key to do
    }
});

答案 2 :(得分:19)

您需要覆盖OnCancel方法。此方法调用Back Key按下。这里的代码对我来说很完美。

 AlertDialog alertDialog;

    alertDialog.setOnCancelListener(new OnCancelListener() 
    {                   
           @Override
            public void onCancel(DialogInterface dialog) 
             {
               // TODO Auto-generated method stub

                    dialog.dismiss();                           

            }
}); 

希望这会对你有所帮助,如果对你有帮助就接受它。

谢谢..

答案 3 :(得分:6)

试试这个

 new AlertDialog.Builder(this).setOnKeyListener(new DialogInterface.OnKeyListener() {

                        @Override
                        public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {

                            if(keyCode == KeyEvent.KEYCODE_BACK){
                                Logger.d(TAG, "--------- Do Something -----------");
                                return true;
                            }
                            return false;


                        }
                    })

答案 4 :(得分:1)

这是因为当您的Dialog打开时,您的窗口会将其焦点导向Dialog。 所以现在你必须在对话框上处理key

答案 5 :(得分:1)

如果您使用DialogFragment,我可以告诉the right way to do it is to override onCancel()

我注意到setOnCancelListener不起作用,setOnKeyListener有效,但对我来说有一个有趣的副作用,如果对话框有编辑文本,它会吞下所有键。

答案 6 :(得分:0)

此代码有效:

    Dialog dlg = new Dialog(thisAct, R.style.DialogTheme);
    dlg.setContentView(view);
    dlg.setCancelable(false);
    dlg.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG);
    dlg.setOnKeyListener((arg0, keyCode, event) -> {
        Timber.d("onKey(%d)", keyCode);
        //{home intercepting
        if ((keyCode == KeyEvent.KEYCODE_HOME)) {
            Timber.i("HOME pressed");
            return true;
        }

        return true;
    });
    dlg.show();

答案 7 :(得分:0)

在您自己的对话框中覆盖方法onBackPressed(),并在您的代码中使用它:

public class MyDialog extends Dialog {

    public MyDialog(@NonNull Context context) {
        super(context);
    }

    @Override
    public void onBackPressed() {
        // Do what you want
    }
}

使用:

MyDialog dlg = new MyDialog(context);
dlg.show();