首页 文章

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

提问于
浏览
84

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

它工作正常 .

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

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

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

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

7 回答

  • 19

    听起来好像你想在创建Dialog时设置OnCancelListener . 它看起来像这样:

    dialog.setOnCancelListener(new DialogInterface.OnCancelListener() {         
        @Override
        public void onCancel(DialogInterface dialog) {
            //do whatever you want the back key to do
        }
    });
    
  • 103
    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;
                }
            });
    
  • 6

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

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

    希望这对您有所帮助,如果它对您有帮助,请接受它 .

    谢谢..

  • 209

    试试这个

    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;
    
    
                            }
                        })
    
  • 1

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

  • 0

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

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

  • 1

    此代码有效:

    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();
    

相关问题