Переопределить диалог onBackPressed ()? - PullRequest
28 голосов
/ 01 июня 2011

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

Ответы [ 5 ]

56 голосов
/ 01 июня 2011

Вы можете использовать setOnCancelListener:

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

Вам нужно закончить только свою деятельностьДиалог будет закрыт автоматически.

24 голосов
/ 24 апреля 2012
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 голосов
/ 07 сентября 2015
@Override
public Dialog onCreateDialog(Bundle savedInstanceState){
  return new Dialog(getActivity(), getTheme()){
    @Override
    public void onBackPressed(){
      // dismiss();
      // activityReference.finish();
    }
  };
}
0 голосов
/ 06 сентября 2016

Наконец, я добавил в свой диалог прослушиватель клавиш для прослушивания клавиши 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 ...)
0 голосов
/ 29 февраля 2016

в моем случае я использую DialogFragment, который все еще является диалогом .. поэтому я переопределяю onCancel() в моем диалоге, и он реагирует как onBackPressed() действия каждый раз, когда я нажимаю кнопку "Назад", когда отображается диалоговое окно.

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

надеюсь, я помог.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...