2011-12-22 29 views
8

Sto cercando di fare una finestra di dialogo con un selettore che appare esattamente come questo:AlertDialog con selettore

AlertDialog with selector

Ho provato con un AlertDialog che contiene un controllo ListView, ma che dà un bordo nero brutto tra il ListView e l'area grigia inferiore. Potrei usare una normale finestra di dialogo, ma non voglio costruire manualmente l'area grigia inferiore.

So che posso creare una sottoclasse di AlertDialog, ma poi avrò bisogno anche di sottoclasse il Builder e questo finirà per essere un sacco di codice per un dettaglio così piccolo. C'è qualche modo pulito per farlo?

Cheers,

risposta

28

Utilizzare la finestra di avviso costruttore, ha opzioni per questo. Breve esempio:

AlertDialog.Builder adb = new AlertDialog.Builder(this); 
CharSequence items[] = new CharSequence[] {"First", "Second", "Third"}; 
adb.setSingleChoiceItems(items, 0, new OnClickListener() { 

     @Override 
     public void onClick(DialogInterface d, int n) { 
      // ... 
     } 

}); 
adb.setNegativeButton("Cancel", null); 
adb.setTitle("Which one?"); 
adb.show(); 

Vedere il dialogs doc, sezione Aggiunta di un elenco.

+2

suggerisco che si fanno in questo modo adb.setSingleChoiceItems (articoli, -1, nuova DialogInterface.OnClickListener() –

+0

@AbdulazizNoor Perché? – Jaec

+0

@Jaec davvero non ricordo perché loooool –

2

Si dovrebbe utilizzare il seguente codice per selezionare un singolo elemento. Questo codice funziona

CharSequence colors[] = new CharSequence[]{"View PDF", "Reduce Size", "Delete PDF", "Share PDF"}; 

      AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this); 
      builder.setTitle("Select Option"); 
      builder.setItems(colors, new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        Log.e("value is", "" + which); 
        switch (which) { 
         case 0: 
          break; 
         case 1: 
          break; 
         case 2: 
          break; 
         case 3: 
          break; 
        } 
       } 
      }); 
      builder.show();