2015-09-10 18 views
9

Jak wyłączyć przycisk dodatni urządzenia Android AlertDialog przez domyślnie?Wyłącz domyślnie przycisk AlertDialog

Wydaje się być całkiem normalne chcieć przycisk pozytywny (w tym przypadku „Zapisz”) jest wyłączony, zanim użytkownik dokonał zmiany widoku (W tym przypadku EditText.

wiem, że Mogę dostać przycisk dzwoniąc pod numer dialog.getButton(DialogInterface.BUTTON_POSITIVE), ale to połączenie zwróci wartość null, jeśli nie zostało jeszcze wywołane show().

+0

Czy próbowałeś wywoływać tworzenie przed pokazem? –

+0

Być może lepiej byłoby zrobić niestandardowe okno dialogowe za pomocą klasy 'DialogFragment'. – ElliotM

+0

Zawarto w klasie DialogFragment. – Joakim

Odpowiedz

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

Musisz wywołać show(), aby uzyskać dostęp do przycisków okna dialogowego alertu, więc zaraz po wywołaniu show() na alertDialog, otrzymujesz negatywny przycisk i ustawiasz go wyłączony w następujący sposób:

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

Tak więc jego przycisk przestawiania jest domyślnie wyłączony.