¿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?

Sam Dutton
fuente

Respuestas:

572
Spinner mySpinner = (Spinner) findViewById(R.id.your_spinner);
String text = mySpinner.getSelectedItem().toString();
vejestorio
fuente
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) {
    }
});
Erich Douglass
fuente
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
lenooh
fuente
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í .

CommonsWare
fuente
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();
gilix
fuente
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.

Matt Logan
fuente
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();
wafaa hilmy
fuente