Как мне переопределить Dialog
onBackPressed
, чтобы закрыть диалоговое окно, а также вызвать finish()
на Activity
, он находится в?
Заменить диалог onBackPressed()?
Ответ 1
Вы можете использовать setOnCancelListener
:
dialog.setOnCancelListener(new DialogInterface.OnCancelListener()
{
@Override
public void onCancel(DialogInterface dialog)
{
MyActivity.this.finish();
}
});
Вам нужно только закончить свою деятельность. Диалог будет отклонен автоматически.
Ответ 2
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;
}
})
Ответ 3
@Override
public Dialog onCreateDialog(Bundle savedInstanceState){
return new Dialog(getActivity(), getTheme()){
@Override
public void onBackPressed(){
// dismiss();
// activityReference.finish();
}
};
}
Ответ 4
в моем случае я использую DialogFragment, который по-прежнему является диалогом..
поэтому я переопределяю onCancel()
в своем диалоговом окне, и он реагирует как onBackPressed()
активности каждый раз, когда я нажимаю кнопку "Назад", когда отображается диалог.
@Override
public void onCancel(DialogInterface dialog)
{
super.onCancel(dialog);
Log.i("RecDialog.onCancel()", "onCancel");
}
надеюсь, что я помог.
Ответ 5
Наконец, я добавил слушателя клавиш в свой диалог, чтобы прослушать клавишу "Назад".
Не такой элегантный, как переопределение 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 ...)