¿Cómo obtener el valor de Spinner?


263

En Android, estoy tratando de obtener el valor Spinner seleccionado con un oyente.

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

Respuestas:


572
Spinner mySpinner = (Spinner) findViewById(R.id.your_spinner);
String text = mySpinner.getSelectedItem().toString();

11
El "valor" es bastante ambiguo aquí. Esto recupera el título del elemento de la ruleta actual (como en la Cadena que se muestra al usuario), pero no su valor si mapeó una matriz int en la ruleta, por ejemplo.
A. Steenbergen

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

128

El Spinner debería disparar 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) {
    }
});

Gracias, funcionó, aunque necesitaba agregar el tipo de retorno nulo a los métodos.
Sam Dutton el

66
¿Realmente no hay forma de lograr esto sin depender de la posición del elemento?
Vinz

77
No es una solución muy útil si desea leer el valor de la ruleta sin depender de un evento de selección.
AndroidDev

3
@Patrick La anulación de anulación nunca es necesaria, solo le dice al compilador "¿Puede verificar si esta anulación se realizó correctamente?"
SiXoS

1
¿Qué pasa con la obtención del elemento seleccionado predeterminado cuando no se realiza ningún cambio en él? El de @ dodo es el más adecuado.
Xtreme Biker

49

Digamos que este es su xml con entradas de spinner (es decir, títulos) y valores:

<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 esta es tu ruleta:

<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

Thx, esto debería estar en el documento oficial de ANDR sobre spinner, solo mostraron obtener valor a través de Listener.
visual

esto es exactamente lo que
estoy

¡Solución perfecta! android:entriesme alegró el día.
coderpc

15

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


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

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

12

Si ya sabe que el artículo es un String, prefiero:

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

Llamar toString()a un Objectque usted sabe es un Stringcamino más indirecto que simplemente lanzar el Objecta String.


2

agregue setOnItemSelectedListener a la referencia del spinner y obtenga los datos así`

 mSizeSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> adapterView, View view, int position, long l) {
            selectedSize=adapterView.getItemAtPosition(position).toString();
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.