Подтвердить что ты не робот

Заменить диалог onBackPressed()?

Как мне переопределить Dialog onBackPressed, чтобы закрыть диалоговое окно, а также вызвать finish() на Activity, он находится в?

4b9b3361

Ответ 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 ...)