Come ottenere il valore Spinner?


263

In Android, sto cercando di ottenere il valore Spinner selezionato con un ascoltatore.

Qual è il modo migliore per ottenere il valore dello spinner?

Risposte:


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

11
"Valore" è piuttosto ambiguo qui. In questo modo viene recuperato il titolo dell'elemento spinner corrente (come in, la stringa visualizzata all'utente), ma non il suo valore se, ad esempio, è stata mappata una matrice int sullo spinner.
A. Steenbergen,

1
@Doge per ottenere il valore dell'elemento selezionato come il valore intero, ad esempio, dovremmo rendere int [] valoriArray e archiviarlo nella funzione onCreate forse da arrays.xml in modo da poter usare valoriArray [(int) mySpinner.getSelectedItemId ()] per ottenere il valore intero
Belal mazlom,

128

Lo Spinner dovrebbe generare un evento "OnItemSelected" quando viene selezionato qualcosa:

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

Grazie - ha funzionato, anche se avevo bisogno di aggiungere il metodo return nid ai metodi.
Sam Dutton,

6
Non c'è davvero alcun modo per raggiungere questo obiettivo senza fare affidamento sulla posizione dell'oggetto?
Vinz

7
Non è una soluzione molto utile se si desidera leggere il valore del filatore senza fare affidamento su un evento di selezione.
AndroidDev

3
@Patrick L'annotazione Override non è mai richiesta, ma indica semplicemente al compilatore "Puoi verificare se questa sostituzione è stata eseguita correttamente?"
SiXoS,

1
Che dire di ottenere l'elemento selezionato predefinito quando non viene eseguita alcuna modifica su di esso? Quello di @dodo è il più appropriato.
Xtreme Biker,

49

Supponiamo che questo sia il tuo XML con voci di spinner (es. Titoli) e valori:

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

e questo è il tuo spinner:

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

Quindi nel tuo codice per ottenere le voci:

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

e per ottenere i valori:

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

Grazie, questo dovrebbe essere nel documento ANDR ufficiale su spinner, hanno mostrato di ottenere valore solo tramite Listener.
visivo

questo è esattamente quello che cerco
jet_choong il

Soluzione perfetta! android:entriesha reso la mia giornata.
coderpc,

15

Sì, puoi registrare un ascoltatore tramite setOnItemSelectedListener(), come mostrato qui .


Grazie: anche questo ha funzionato e (penso) rende il codice più facile da leggere.
Sam Dutton,

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

12

Se sai già che l'articolo è un String, preferisco:

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

Richiamare toString()un Objectche sai è un Stringpercorso più rotondeggiante che semplicemente lanciare il Objectto String.


2

aggiungi setOnItemSelectedListener al riferimento dello spinner e ottieni i dati in quel modo`

 mSizeSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> adapterView, View view, int position, long l) {
            selectedSize=adapterView.getItemAtPosition(position).toString();
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.