2011-08-24 13 views
14

Sto cercando di utilizzare le enumerazioni per un elenco all'interno di un widget spinner su Android. Io ho la mia messa a punto enumerazioni come segue:Aggiunta di Enum all'array Adattatore per Spinner in Android

public enum States{ 

AL("Alabama"), 
AK("Alaska"), 
AR("Arkansas"), 
AZ("Arizona"), 
CA("California"), 
CO("Colorado"), 
    ... (etc.) 
} 

mio adattatore gamma attuale è configurato come segue:

mAddressState.setAdapter(new ArrayAdapter<States>(this, android.R.layout.simple_list_item_1, States.values())); 

Questo quasi funziona, ma nella mia lista filatrice io alla fine con le abbreviazioni, piuttosto che la nomi di stato (che è quello che sto andando per). C'è una soluzione alternativa per ottenere questa installazione correttamente?

risposta

33

Spero che questo aiuti qualcuno. Mi ci è voluto un po 'per capirlo da solo. Il trucco è sovrascrivere toString nel tuo enum. Il codice per la vostra stati enum sarebbe:

public enum States{ 
    AL("Alabama"), 
    AK("Alaska"), 
    AR("Arkansas"), 
    AZ("Arizona"), 
    CA("California"), 
    CO("Colorado"), 
    ... (etc.); 

    private String theState; 

    States(String aState) { 
    theState = aState; 
    } 

    @Override public String toString() { 
    return theState; 
    } 
} 

Quindi, creare l'adattatore proprio come si fa:

mAddressState.setAdapter(new ArrayAdapter<States>(this, 
     android.R.layout.simple_list_item_1, States.values())); 

ei lunghi nomi verranno visualizzati nella filatore. Per ottenere il nome abbreviato dall'adattatore, per memorizzare quello selezionato, ad esempio, utilizzare la funzione enum.name(). Ad esempio:

Spinner spinner = (Spinner) myView.findViewById(R.id.theState); 
String selected = ((States)spinner.getSelectedItem()).name(); 
0

Aggiungi un costruttore enum in questo modo ... quindi sostituire States.values ​​() con States.fullName()

public enum States{ 

    AL("Alabama"), 
    AK("Alaska"), 
    ... (etc.) 

    private String fullName; 

    States(String fullName) { 
     this.fullName = fullName; 
    } 

    public String fullName() { return fullName; } 
} 
+0

Che non ha funzionato. Lo stavo già facendo e non ho specificato, mi dispiace. L'adattatore di array non sembra voler bene a me provare a farlo. mAddressState.setAdapter (nuovo ArrayAdapter (questo, android.R.layout.simple_list_item_1, States.getStateName())); Ho anche provato a installare il tipo di scheda matrice per nuova ArrayAdapter Ancora non ha fatto quello che cercavo. Qualche altro consiglio? – RyanInBinary

0

Forse si potrebbe provare l'override la funzione toString() come mostrato qui here. Non ho ancora provato, ma stavo proprio per.

Problemi correlati