2010-05-31 8 views
17

J'ai besoin d'aide pour configurer la valeur et afficher le texte dans spinner. selon maintenant je suis peuplant mon fileuse par l'adaptateur réseau par exemple Définition des valeurs et affichage du texte dans Android Spinner

mySpinner.setAdapter(myAdapter); 

et pour autant que je sache, après avoir fait ce texte d'affichage et la valeur de spinner à la même position est la même. L'autre attribut que je peux obtenir de spinner est la position sur l'article.

maintenant dans mon cas je veux faire spinner comme la boîte déroulante, que nous avons. NET.

qui contient un texte et une valeur. Où le texte est affiché et la valeur est à l'extrémité arrière.

donc si je change de liste déroulante, je peux soit utiliser le texte ou la valeur sélectionnée. mais ce ne se passe pas dans le cas de spinner android.

Par exemple:

Texte Valeur
Cat 10
Montagne 5
Pierre 9
Poisson 14
River 13
Longe 17

donc de tableau ci-dessus, je ne fais que l'affichage des objets non-vivants texte, et ce que je veux est que lorsque l'utilisateur les sélectionner, je reçois là la valeur-à-dire comme quand la montagne sélectionnée je reçois 5

J'espère que cette exemple en ma question un peu plus clair ...

thankx

+0

Une autre grande option si vous n'êtes pas l'obtenir d'une persistante source de données et il est juste un tableau statique d'affichage du texte et Les valeurs sont enumées. Faites-moi savoir si vous êtes intéressé et je posterai une réponse. –

+0

Voir ceci pour le moment tho: http://stackoverflow.com/a/37266810/293280 –

Répondre

11

Étape # 1: Créer un modèle de données pour votre texte et la valeur paire

Étape # 2: Prolonger BaseAdapter ou ArrayAdapter à enrouler autour de votre modèle de données, outrepassant getView() retourner tout ce que vous voulez afficher dans le Spinner se

Étape # 3: Sur un événement de sélection, utilisez la position pour trouver l'objet correspondant dans votre modèle de données, et rechercher la valeur

Si tout ce que vous voulez afficher dans la Spinner est juste une représentation de texte de chaque élément dans le modèle de données, vous pouvez ignorer la coutume Adapter - il suffit d'utiliser ArrayAdapter<YourModelClass> et passer outre toString() sur YourModelClass pour revenir tout affichage texte que vous voulez.

+0

manquait toString() dans le modèle, merci pour suggestion! – cking24343

15

Si vous ne voulez pas créer votre propre classe d'adaptateur, vous pouvez à la place envelopper vos données dans quelque chose qui doit renvoyer ce que vous voulez montrer dans le spinner.J'utilise une classe comme ceci:

public class TextItemPair<T> { 
    private String text; 
    private T item; 
    public TextItemPair(String text, T item) { 
      this.text = text; 
      this.item = item; 
    } 
    public String getText() { 
     return text; 
    } 
    public T getItem() { 
     return item; 
    } 
    @Override 
    public String toString() { 
     return getText(); 
    } 
} 

Et quand les changements de spinner:

public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { 
    YourTypeHere t = ((TextItemPair<YourTypeHere>)spinner.getItemAtPosition(position)).getItem(); 
} 
+0

cela suffit si vous avez la classe personnalisée textValeur @Override public String toString() { return getText(); } –