Override dialog onBackPressed()?

后端 未结 5 787
醉梦人生
醉梦人生 2020-12-16 09:51

How would I override a Dialog\'s onBackPressed to close the dialog as well as calling finish() on the Activity it is loca

相关标签:
5条回答
  • 2020-12-16 10:35

    I finally added a key listener to my dialog to listen to the Back key. Not as elegant as overriding onBackPressed() but it works. Here is the code:

    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 讨论(0)
  • 2020-12-16 10:39

    You can use setOnCancelListener:

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

    You need to finish only your activity. Dialog will be dismissed automatically.

    0 讨论(0)
  • 2020-12-16 10:40
    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;
                        }
                    })
    
    0 讨论(0)
  • 2020-12-16 10:48
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState){
      return new Dialog(getActivity(), getTheme()){
        @Override
        public void onBackPressed(){
          // dismiss();
          // activityReference.finish();
        }
      };
    }
    
    0 讨论(0)
  • 2020-12-16 10:50

    in my case i use DialogFragment, which is still a dialog.. so i overriden onCancel() in my dialog, and it reacts like onBackPressed() of the Activity everytime i click the back button when dialog is shown.

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

    hope i helped.

    0 讨论(0)
提交回复
热议问题