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?

Sam Dutton
la source

Réponses:

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

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

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