2011-08-24 10 views
14

Szukam użyć wyliczenia dla listy wewnątrz widgetu pokrętła na Androida. Mam konfiguracji wyliczenia w następujący sposób:Dodawanie adapterów do adapterów dla Spinner w systemie Android

public enum States{ 

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

Mój obecny adapter tablica jest ustawiony w następujący sposób:

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

To prawie działa, ale w moim liście do wirowania I skończyć z skrótów, zamiast nazwy stanów (o to właśnie chodzi). Czy istnieje obejście, aby poprawnie ustawić tę konfigurację?

Odpowiedz

33

Mam nadzieję, że to pomoże komuś. Zajęło mi trochę czasu, aby go rozwiązać. Sztuką jest przesłonięcie doString w twoim wyliczeniu. Kod dla stanów wyliczenia byłoby:

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

Następnie należy utworzyć adapter tak zrobić:

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

i długie nazwy pojawią się w turbinki. Aby uzyskać nazwę skróconą z adaptera, aby zapisać wybraną na przykład, użyj funkcji enum.name(). Na przykład:

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

Dodaj konstruktora enum jak tak ... potem zastąpić States.values ​​() z 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

To nie zadziałało. Tak naprawdę to robiłem i nie sprecyzowałem, przepraszam. Adapter tablicowy nie wydaje się lubić mnie próbującego to zrobić. mAddressState.setAdapter (nowy ArrayAdapter (this, android.R.layout.simple_list_item_1, States.getStateName())); Próbowałem też ustawić typ adaptera tablicy do nowego ArrayAdapter Nadal nie robić tego, co było potem. Wszelkie inne porady? – RyanInBinary

0

może można spróbować nadrzędnymi funkcję toString(), jak pokazano tutaj here. Nie próbowałem tego jeszcze, ale właśnie miałem to zrobić.

Powiązane problemy