Android: How to override onBackPressed() in AlertDialog?

后端 未结 4 1402
[愿得一人]
[愿得一人] 2021-02-05 04:30

I have an AlertDialog dlgDetails which is shown from another AlertDialog dlgMenu. I would like to be able to show dlgMenu again if the user presses the

相关标签:
4条回答
  • 2021-02-05 04:54

    Found a shorter solution :) try this:

             accountDialog = builder.create();
    
            accountDialog.setOnCancelListener(new OnCancelListener() {
    
                @Override
                public void onCancel(DialogInterface dialog) {
                    dialog.dismiss();
                    activity.finish();
    
                }
            });
    
    0 讨论(0)
  • 2021-02-05 05:07

    This handles both the BACK button and the click OUTSIDE the dialog:

    yourBuilder.setOnCancelListener(new OnCancelListener() {
        @Override
        public void onCancel(DialogInterface dialog) {
            dialog.cancel();
            // do your stuff...
        }
    });
    

    dialog.cancel() is the key: with dialog.dismiss() this would handle only the click outside of the dialog, as answered above.

    0 讨论(0)
  • 2021-02-05 05:09

    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 ...)
    

    For answer in Kotlin see here:Not working onbackpressed when setcancelable of alertdialog is false

    0 讨论(0)
  • 2021-02-05 05:09

    I created a new function within the java class and made a call to that function from the onClick method of the dialog Builder.

    public class Filename extends Activity(){
    
    @Override
    onCreate(){
     //your stuff
     //some button click launches Alertdialog
    }
    
    public void myCustomDialog(){
     AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
     //other details for builder
          alertDialogBuilder.setNegativeButton("BACK",
                new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                             dialod.dismiss;
                             myCustomBack();
                        }
          });
    
     AlertDialog alertDialog = alertDialogBuilder.create();
     alertDialog.setCanceledOnTouchOutside(true);
     alertDialog.show();
    }
    
    public void myCustomBack(){
      if(condition1){
        super.onBackPressed();
      }
      if(condition 2){
        //do  stuff here
      }
    }
    
    @Override
    public void onBackPressed(){
      //handle case here
      if (condition A)
        //Do this
      else 
        //Do that
    }
    
    }
    
    0 讨论(0)
提交回复
热议问题