How to prevent AlertDialog to close?

前端 未结 2 496
走了就别回头了
走了就别回头了 2020-12-19 16:46

I\'m using AlertDialog.Builder to build my dialog, it has an EditText which is necessary to be filled and I want to prevent closing the dialog while it is not. In the positi

相关标签:
2条回答
  • 2020-12-19 17:11

    You can use setOnShowListener

    AlertDialog.Builder sayWindows = new AlertDialog.Builder(
                    MapActivity.this);
            final EditText saySomething = new EditText(MapActivity.this);
            sayWindows.setPositiveButton("ok", null);
            sayWindows.setNegativeButton("cancel", null);
            sayWindows.setAdapter(listWords, null);
            sayWindows.setView(saySomething);
    
            final AlertDialog mAlertDialog = sayWindows.create();
            mAlertDialog.setOnShowListener(new DialogInterface.OnShowListener() {
    
                @Override
                public void onShow(DialogInterface dialog) {
    
                    Button b = mAlertDialog.getButton(AlertDialog.BUTTON_POSITIVE);
                    b.setOnClickListener(new View.OnClickListener() {
    
                        @Override
                        public void onClick(View view) {
                            // TODO Do something
                           say = userName + " Says: "+saySomething.getText();
                           showPosition.setText(say); 
                        }
                    });
                }
            });
            mAlertDialog.show();
    

    source : Android Don't dismiss AlertDialog after clicking PositiveButton

    0 讨论(0)
  • 2020-12-19 17:24

    You can change the behavior of the button immediately after calling show() of the dialog, like this.

    AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
    builder.setMessage("Test for preventing dialog close");
    builder.setPositiveButton("Test", 
            new DialogInterface.OnClickListener()
            {
                @Override
                public void onClick(DialogInterface dialog, int which)
                {
                    //Do nothing here because we override this button later to change the close behaviour. 
                    //However, we still need this because on older versions of Android unless we 
                    //pass a handler the button doesn't get instantiated
                }
            });
    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.
              }
          });
    
    0 讨论(0)
提交回复
热议问题