2009-12-22 19 views
197

En Android, estoy tratando de obtener el valor de Spinner seleccionado con un oyente.¿Cómo obtener el valor de Spinner?

¿Cuál es la mejor manera de obtener el valor del rotor?

+1

Definitivamente debe aceptar [la respuesta del dodo] (http://stackoverflow.com/a/7486969/1747491). – theblang

Respuesta

478
Spinner mySpinner=(Spinner) findViewById(R.id.your_spinner); 
String text = mySpinner.getSelectedItem().toString(); 
+7

El "valor" es bastante ambiguo aquí. Esto recupera el título actual del ítem giratorio (como en, la Cadena que se muestra al usuario), pero no su valor si mapeó una matriz int en el agitador, por ejemplo. –

+1

@Doge para obtener el valor del elemento seleccionado como valor entero, por ejemplo debemos hacer int [] valuesArray y archivarlo en la función Crear tal vez de arrays.xml para que podamos usar valuesArray [(int) mySpinner.getSelectedItemId()] para obtener el valor entero –

11

Sí, puede registrar un oyente a través de setOnItemSelectedListener(), como se demuestra here.

+0

Gracias - esto también funcionó, y (creo) hace que el código sea más fácil de leer. –

112

El Spinner debería desencadenar un evento "OnItemSelected" cuando se selecciona algo:

spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { 
    public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) { 
     Object item = parent.getItemAtPosition(pos); 
    } 
    public void onNothingSelected(AdapterView<?> parent) { 
    } 
}); 
+0

Gracias - eso funcionó, aunque necesitaba agregar el tipo de retorno nulo a los métodos. –

+6

¿Realmente no hay manera de lograr esto sin depender de la posición del artículo? – Vinz

+5

No es una solución muy útil si quiere leer el valor de la flecha giratoria sin depender de un evento de selección. – AndroidDev

9
View view =(View) getActivity().findViewById(controlId); 
Spinner spinner = (Spinner)view.findViewById(R.id.spinner1); 
String valToSet = spinner.getSelectedItem().toString(); 
8

Si ya conoce el elemento es un String, prefiero:

String itemText = (String) mySpinner.getSelectedItem(); 

Llamar a toString() en un Object que sabe que es String parece más ruta indirecta que acaba de lanzar el Object al String.

33

decir que este es el código XML con las entradas de pico largo y valores (es decir, los títulos.):

<resources> 
    <string-array name="size_entries"> 
     <item>Small</item> 
     <item>Medium</item> 
     <item>Large</item> 
    </string-array> 

    <string-array name="size_values"> 
     <item>12</item> 
     <item>16</item> 
     <item>20</item> 
    </string-array> 
</resources> 

y esto es su spinner:

<Spinner 
    android:id="@+id/size_spinner" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:entries="@array/size_entries" /> 

Luego, en su código para obtener las entradas:

Spinner spinner = (Spinner) findViewById(R.id.size_spinner); 
String size = spinner.getSelectedItem().toString(); // Small, Medium, Large 

y para obtener los valores:

int spinner_pos = spinner.getSelectedItemPosition(); 
String[] size_values = getResources().getStringArray(R.array.size_values); 
int size = Integer.valueOf(size_values[spinner_pos]); // 12, 16, 20 
+0

Thx, esto debería estar en el documento oficial ANDR en spinner, solo mostraban cómo obtener valor a través del Listener. – visual

+0

esto es exactamente lo que estoy buscando –