Thursday 30 April 2015

Prevent an AlertDialog from closing on PositiveButton click

In this article, I am going to demonstrate using AlertDialog, which Prevent an AlertDialog from closing on Positive Button click.

Code:

public void ShowDialog()
   {
  
       AlertDialog.Builder builder = new AlertDialog.Builder(this); 
       builder.setCancelable(false);
       builder.setTitle("Sample Dialog");
       builder.setMessage("Test for preventing dialog close");
       builder.setIcon(R.drawable.ic_launcher);
       builder.setPositiveButton("OK", new OnClickListener()
       { 
      @Override public void onClick(DialogInterface dialog, int which) 
      {
       // TODO Auto-generated method stub 
      
      } });
       builder.setNegativeButton("Cancel", new OnClickListener() {
      @Override public void onClick(DialogInterface dialog, int which) {
      // TODO Auto-generated method stub
     
      } });
       
      final AlertDialog dialog = builder.create();
      dialog.show();
      
    //Overriding the handler immediately after show is probably a better approach than                                      OnShowListener as described below 
      dialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(new View.OnClickListener() { 
      @Override public void onClick(View v) {
       Boolean wantToCloseDialog = false;
       //Do stuff, possibly set wantToCloseDialog to true then... 
     if(wantToCloseDialog)
     dialog.dismiss();
       //else dialog stays open. Make sure you have an obvious way to close the dialog especially if you              set cancellable to false. 
      } }); 
     
     dialog.getButton(AlertDialog.BUTTON_NEGATIVE).setOnClickListener(new View.OnClickListener() {
      @Override public void onClick(View v) {
      Boolean wantToCloseDialog = false; 
     //Do stuff, possibly set wantToCloseDialog to true then... 
     if(wantToCloseDialog)
     dialog.dismiss();
      //else dialog stays open. Make sure you have an obvious way to close the dialog especially if                     you set cancellable to false. 
     } });

    }

Result:


1 comment: