覆盖对话框onBackPressed()?

我将如何重写一个DialogonBackPressed来closures对话框以及在它所在的Activity上调用finish()

Solutions Collecting From Web of "覆盖对话框onBackPressed()?"

你可以使用setOnCancelListener

 dialog.setOnCancelListener(new DialogInterface.OnCancelListener() { @Override public void onCancel(DialogInterface dialog) { MyActivity.this.finish(); } }); 

你只需要完成你的活动。 对话框将被自动解除。

 dialog.setOnKeyListener(new DialogInterface.OnKeyListener() { @Override public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { dialog.cancel(); return true; } return false; } }) 
 @Override public Dialog onCreateDialog(Bundle savedInstanceState){ return new Dialog(getActivity(), getTheme()){ @Override public void onBackPressed(){ // dismiss(); // activityReference.finish(); } }; } 

在我的情况下,我使用DialogFragment,它仍然是一个对话框..所以我重写onCancel()在我的对话框,它的反应像活动的onBackPressed()每次我点击后退button,当对话框显示。

 @Override public void onCancel(DialogInterface dialog) { super.onCancel(dialog); Log.i("RecDialog.onCancel()", "onCancel"); } 

希望我帮助。

我最后添加了一个关键的监听器到我的对话框来听Back键。 没有优先重写onBackPressed()但它的作品。 这里是代码:

 dlgDetails = new AlertDialog.Builder(this) .setOnKeyListener(new DialogInterface.OnKeyListener() { @Override public boolean onKey (DialogInterface dialog, int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_UP && !event.isCanceled()) { dialog.cancel(); showDialog(DIALOG_MENU); return true; } return false; } }) //(Rest of the .stuff ...)