Comment obtenir une valeur Spinner?


263

Sous Android, j'essaie d'obtenir la valeur Spinner sélectionnée avec un écouteur.

Quelle est la meilleure façon d'obtenir la valeur du spinner?

Réponses:


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

11
La "valeur" est assez ambiguë ici. Cela récupère le titre actuel de l'élément de spinner (comme dans la chaîne qui est affichée à l'utilisateur), mais pas sa valeur si vous avez mappé un tableau int sur le spinner par exemple.
A. Steenbergen

1
@Doge pour obtenir la valeur de l'élément sélectionné comme la valeur entière par exemple, nous devons créer int [] valuesArray et le déposer dans la fonction onCreate, peut-être à partir de arrays.xml afin que nous puissions utiliser valuesArray [(int) mySpinner.getSelectedItemId ()] pour obtenir la valeur entière
Belal mazlom

128

Le Spinner doit déclencher un événement "OnItemSelected" lorsqu'un élément est sélectionné:

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

Merci - cela a fonctionné, même si j'avais besoin d'ajouter le type de retour void aux méthodes.
Sam Dutton

6
N'y a-t-il vraiment aucun moyen d'y parvenir sans se fier à la position de l'article?
Vinz

7
Pas une solution très utile si vous voulez lire la valeur du spinner sans compter sur un événement de sélection.
AndroidDev

3
@Patrick L'annotation Override n'est jamais requise, elle indique simplement au compilateur "Pouvez-vous vérifier si cette substitution est effectuée correctement?"
SiXoS

1
Qu'en est-il de l'obtention de l'élément sélectionné par défaut lorsqu'aucune modification n'est effectuée? celui de @ dodo est le plus approprié.
Xtreme Biker

49

Dites qu'il s'agit de votre xml avec des entrées de spinner (c'est-à-dire des titres) et des valeurs:

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

et voici votre spinner:

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

Puis dans votre code pour obtenir les entrées:

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

et pour obtenir les valeurs:

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, cela devrait être dans le document officiel ANDR sur spinner, ils n'ont montré que la valeur via Listener.
visuel du

c'est exactement ce que je cherche
jet_choong

Solution parfaite! android:entriesfait ma journée.
coderpc

15

Oui, vous pouvez enregistrer un auditeur via setOnItemSelectedListener(), comme illustré ici .


Merci - cela a fonctionné aussi, et (je pense) cela rend le code plus facile à lire.
Sam Dutton

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

12

Si vous savez déjà que l'article est un String, je préfère:

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

Faire appel toString()à un Objectque vous connaissez est un Stringchemin plus détourné que de simplement lancer le Objectto String.


2

ajoutez setOnItemSelectedListener à la référence de spinner et obtenez les données comme ça`

 mSizeSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
        @Override
        public void onItemSelected(AdapterView<?> adapterView, View view, int position, long l) {
            selectedSize=adapterView.getItemAtPosition(position).toString();
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.