2015-09-10 15 views
9

Come si disabilita il pulsante positivo di un telefono Android AlertDialog per predefinito?Disattiva (positivo) il pulsante di AlertDialog per impostazione predefinita

sembra essere del tutto normale voler pulsante positivo (in questo caso "Save") per essere disattivato prima che l'utente ha fatto una modifica alla vista (in questo caso un EditText.

So che Posso ottenere il pulsante chiamando dialog.getButton(DialogInterface.BUTTON_POSITIVE) ma questa chiamata restituirà null se show() non è stato ancora chiamato

+0

Hai provato a chiamare creare prima di mostrare? –

+0

Potrebbe essere meglio fare una finestra di dialogo personalizzata usando la classe 'DialogFragment'. – ElliotM

+0

È contenuto in una classe DialogFragment. – Joakim

risposta

12
AlertDialog.Builder builder = new AlertDialog.Builder(this); 
builder.setPositiveButton(android.R.string.ok, null); 
AlertDialog dialog = builder.create(); 
dialog.setOnShowListener(new OnShowListener() { 

    @Override 
    public void onShow(DialogInterface dialog) { 
     if(condition) 
     ((AlertDialog)dialog).getButton(AlertDialog.BUTTON_POSITIVE).setEnabled(false); 
    } 
}); 

dialog.show(); 
3

È necessario chiamare show() per accedere ai pulsanti della finestra di avviso. Quindi, subito dopo si chiama show() su alertDialog, ottieni il pulsante negativo e lo disattivi in ​​questo modo:

AlertDialog.Builder builder = new AlertDialog.Builder(getContext()) 
      .setTitle("Title") 
      .setMessage("Message") 
      .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int which) { 

       } 
      }) 
      .setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() { 
       public void onClick(DialogInterface dialog, int which) { 

       } 
      }) 
      .setIcon(android.R.drawable.ic_dialog_alert); 
    AlertDialog d = builder.show(); 
    d.getButton(AlertDialog.BUTTON_NEGATIVE).setEnabled(false); 

Quindi, il suo pulsante negativo viene disabilitato per impostazione predefinita.