如何覆盖Dialog
onBackPressed
来关闭对话框以及在finish()
上调用Activity
?
答案 0 :(得分:56)
您可以使用setOnCancelListener
:
dialog.setOnCancelListener(new DialogInterface.OnCancelListener()
{
@Override
public void onCancel(DialogInterface dialog)
{
MyActivity.this.finish();
}
});
您只需完成自己的活动。对话框将自动被解雇。
答案 1 :(得分:24)
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;
}
})
答案 2 :(得分:3)
@Override
public Dialog onCreateDialog(Bundle savedInstanceState){
return new Dialog(getActivity(), getTheme()){
@Override
public void onBackPressed(){
// dismiss();
// activityReference.finish();
}
};
}
答案 3 :(得分:0)
在我的情况下,我使用DialogFragment,它仍然是一个对话框..
所以我在我的对话框中覆盖onCancel()
,每当我在显示对话框时单击后退按钮,它就会像活动的onBackPressed()
一样做出反应。
@Override
public void onCancel(DialogInterface dialog)
{
super.onCancel(dialog);
Log.i("RecDialog.onCancel()", "onCancel");
}
希望我帮忙。
答案 4 :(得分:0)
我最后在我的对话框中添加了一个关键监听器来监听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 ...)