2010-05-31 12 views
17

Necesito ayuda para configurar el valor y mostrar el texto en el control giratorio. según Ahora estoy poblando mi hilandero de serie del adaptador por ejemploConfiguración de valores y visualización de texto en Android Spinner

mySpinner.setAdapter(myAdapter); 

y por lo que yo sé después de hacer esto el texto de la pantalla y el valor de la ruleta en la misma posición es el mismo. El otro atributo que puedo obtener de spinner es la posición en el artículo.

ahora en mi caso Quiero hacer spinner como el cuadro desplegable, que tenemos en .NET.

que contiene un texto y un valor.

donde se muestra el texto y el valor está en el extremo posterior. así que si cambio el cuadro desplegable, puedo usar su texto o valor seleccionado. pero no está sucediendo en caso de spinner Android.

Por ejemplo:

Texto Valor
gato 10
Montaña 5
Piedra 9
Fish 14
río 13
Lomo 17

modo de gama superior que sólo estoy mostrando no vivos objetos de texto, y lo que quiero es que cuando el usuario los seleccione llego valor, es decir, como cuando la montaña seleccionado consigo 5

espero que este ejemplo hizo que mi pregunta un poco más claro ...

thankx

+0

Otra gran opción si usted no está recibiendo desde una fuente de datos persistió y es sólo una matriz estática de presentación de texto y Valores es un Enum. Avíseme si está interesado y publicaré una respuesta. –

+0

Vea esto por ahora tho: http://stackoverflow.com/a/37266810/293280 –

Respuesta

11

Paso # 1: Crear un modelo de datos para el texto y el valor par

Paso # 2: Extender BaseAdapter o ArrayAdapter para envolver alrededor de su modelo de datos, anulando getView() para devolver lo que desea mostrar en el Spinner

Paso # 3: En un evento de selección, utilice la posición para encontrar el objeto correspondiente en el modelo de datos, y buscar el valor

Si todo lo que desea mostrar en el Spinner es sólo una representación de texto de cada elemento en el modelo de datos, puede omitir la costumbre Adapter - sólo tiene que utilizar ArrayAdapter<YourModelClass> y anular toString() en YourModelClass para devolver cualquier pantalla texto que quieres

+0

faltaba el modelo toString(), ¡gracias por la sugerencia! – cking24343

15

Si no desea crear su propia clase de adaptador, puede en cambio envolver sus datos en algo que tenga aString devolviendo lo que desea mostrar en la ruleta.Yo uso una clase como esta:

public class TextItemPair<T> { 
    private String text; 
    private T item; 
    public TextItemPair(String text, T item) { 
      this.text = text; 
      this.item = item; 
    } 
    public String getText() { 
     return text; 
    } 
    public T getItem() { 
     return item; 
    } 
    @Override 
    public String toString() { 
     return getText(); 
    } 
} 

Y cuando los cambios spinner:

public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
    YourTypeHere t = ((TextItemPair<YourTypeHere>)spinner.getItemAtPosition(position)).getItem(); 
} 
+0

solo esto es suficiente si tiene textvalue clase personalizada @Override public String toString() { return getText(); } –

Cuestiones relacionadas