2010-10-14 5 views
3

Je souhaite créer un ArrayAdapter pour un spinner. Chaque élément contient donc une chaîne (qui sera affichée dans la liste déroulante/liste) et une valeur (par exemple un ID). Comment je peux facilement stocker une deuxième valeur à côté de chaque chaîne sans implémenter une nouvelle classe Adapter?Attribuer une valeur à chaque chaîne de l'ArrayAdapter

Sincèrement xZise

Répondre

5

Vous pouvez créer une classe avec deux champs: un pour le texte et un autre pour l'ID. Et implémentez la méthode toString en renvoyant la valeur du champ de texte. Voici un exemple:

package org.me.adaptertest; 

import android.app.ListActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.widget.Toast; 
import java.util.ArrayList; 
import java.util.List; 

public class MainActivity extends ListActivity { 
    public static class Element { 
     private String mText; 
     private long mId; 

     public Element(String text, long id) { 
      mText = text; 
      mId = id; 
     } 

     public long getId() { 
      return mId; 
     } 

     public void setId(long id) { 
      mId = id; 
     } 

     public String getmText() { 
      return mText; 
     } 

     public void setmText(String mText) { 
      this.mText = mText; 
     } 

     @Override 
     public String toString() { 
      return mText; 
     } 
    } 

    private List<Element> mItems; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle icicle) { 
     super.onCreate(icicle); 
     mItems = new ArrayList<MainActivity.Element>(); 
     mItems.add(new Element("Element 1", 1)); 
     mItems.add(new Element("Element 2", 2)); 
     mItems.add(new Element("Element 3", 3)); 
     setListAdapter(new ArrayAdapter(this, android.R.layout.simple_list_item_1, 
       android.R.id.text1, mItems)); 
     getListView().setOnItemClickListener(new ListView.OnItemClickListener() { 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
       Toast.makeText(MainActivity.this, 
         "ID is " + mItems.get(position).getId(), 
         Toast.LENGTH_SHORT).show(); 
      } 
     }); 
    } 
} 
+0

Ah je n'ai pas remarqué que le spinner n'a pas besoin d'ArrayAdapter . Merci ;) – xZise

0

Vous pouvez utiliser un hashmap pour mapper un ID à chaque chaîne.

+1

Mais un hashmap n'implémente pas SpinnerAdapter. Donc, le fileur ne l'acceptera pas. Sincèrement xZise – xZise

Questions connexes