2009-12-22 6 views
197

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

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

+1

Vous devriez définitivement accepter [la réponse de dodo] (http://stackoverflow.com/a/7486969/1747491). – theblang

Répondre

478
Spinner mySpinner=(Spinner) findViewById(R.id.your_spinner); 
String text = mySpinner.getSelectedItem().toString(); 
+7

"Valeur" est assez ambigu ici. Cela récupère le titre actuel de l'élément 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. –

+1

@Doge pour obtenir la valeur de l'élément sélectionné comme valeur entière par exemple nous devrions faire int [] valuesArray et le classer 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 –

11

Oui, vous pouvez enregistrer un écouteur via setOnItemSelectedListener(), comme démontré here.

+0

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

112

Le Spinner devrait déclencher un événement "OnItemSelected" quand quelque chose 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) { 
    } 
}); 
+0

Merci - cela a fonctionné, bien que j'ai dû ajouter le type de retour de void aux méthodes. –

+6

N'y at-il vraiment aucun moyen d'y parvenir sans compter sur la position de l'objet? – Vinz

+5

Pas une solution très utile si vous voulez lire la valeur spinner sans se fier à un événement de sélection. – AndroidDev

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

Si vous connaissez déjà l'élément est un String, je préfère:

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

Appeler toString() sur un Object que vous connaissez est un String semble être plus chemin du rond-point que de simplement couler le Object à String.

33

Dites ceci est votre xml avec des entrées de spinner et les valeurs (c.-à-titres.):

<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 ceci est 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 
+0

Thx, cela devrait être dans le document officiel ANDR sur spinner, ils ont montré seulement obtenir de la valeur via Listener. – visual

+0

exactement ce que je cherche –