2011-08-24 14 views
14

Estoy buscando utilizar enumeraciones para una lista dentro de un widget spinner en Android. Tengo mi configuración enumeraciones de la siguiente manera:Agregar entradas al adaptador de matriz para Spinner en Android

public enum States{ 

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

Mi adaptador de matriz actual se configura como sigue:

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

Esto casi funciona, pero en mi lista spinner termino con las abreviaturas, en lugar de la nombres de estado (que es lo que estoy buscando). ¿Hay alguna solución para obtener esta configuración correctamente?

Respuesta

33

Espero que esto ayude a alguien. Me tomó un tiempo resolverlo por mí mismo. El truco es anular toString en tu enumeración. El código para su enumeración sería estados:

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

A continuación, cree el adaptador tal como lo hace:

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

y los nombres largos se mostrarán en la ruleta. Para obtener el nombre abreviado del adaptador, para almacenar el seleccionado, por ejemplo, use la función enum.name(). Por ejemplo:

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

Añadir un constructor de enumeración así ... luego vuelva a colocar 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

Eso no funcionó. De hecho, ya estaba haciendo eso y no especificó, lo siento. Al adaptador de matriz no parece gustarme que intente hacer eso. mAddressState.setAdapter (nuevo ArrayAdapter (esto, android.R.layout.simple_list_item_1, States.getStateName())); También probé ajustar el tipo de adaptador de matriz para nueva ArrayAdapter Aún no hacía lo que yo buscaba. ¿Algún otro consejo? – RyanInBinary

0

tal vez usted podría intentar anular la función toString(), como se muestra aquí here. No lo he probado todavía, pero estaba a punto de hacerlo.

Cuestiones relacionadas