web-dev-qa-db-fra.com

Réglage de l'identifiant pour les objets Spinner

J'ai un tableau de chaînes avec lequel je remplis un objet Spinner. Cependant, j'aimerais attacher un identifiant à chaque élément du Spinner. Ainsi, lorsque l'utilisateur sélectionne un élément, j'ai son identifiant à utiliser pour enregistrer dans un autre élément de données. Comment puis-je faire ceci?

30
Andrew

Qu'entendez-vous par identifiant? Vous pouvez utiliser ArrayAdapter pour remplir le spinner. Lorsque l'élément est sélectionné, récupérez simplement l'élément dans l'adaptateur et sauvegardez les données souhaitées.

Spinner spinner = (Spinner) findViewById(R.id.spinner);
ArrayAdapter<MyObject> adapter = ... // initialize the adapter
adapter.setDropDownViewResource(Android.R.layout.some_view);
spinner.setAdapter(adapter);

et quand l'article est sélectionné 

public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
    MyObject selected = parent.getItemAtPosition(pos);
    // save any data relevant with selected item   
}

Si vous stockez vos données dans la base de données, vous pouvez utiliser CursorAdapter et dans onItemSelected pour extraire l'identifiant d'élément sélectionné à partir du curseur.

19
Mojo Risin

Créez une classe StringWithTag et utilisez-la à la place du nom de la chaîne dans la liste, comme suit: -

public class StringWithTag {
    public String string;
    public Object tag;

    public StringWithTag(String stringPart, Object tagPart) {
        string = stringPart;
        tag = tagPart;
    }

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

dans l'ajout d'éléments à la partie fileuse: -

List<StringWithTag> list = new ArrayList<StringWithTag>();
list.add(new StringWithTag("Oldman", "12345"));
list.add(new StringWithTag("Umpire", "987654"));
list.add(new StringWithTag("Squad", "ABCDEE"));
ArrayAdapter<StringWithTag> adap = new ArrayAdapter<StringWithTag> (this, Android.R.layout.simple_spinner_item, list);
....
....

dans l'auditeur: -

public void onItemSelected(AdapterView<?> parant, View v, int pos, long id) {
    StringWithTag s = (StringWithTag) parant.getItemAtPosition(pos);
    Object tag = s.tag;
}

voila! }

35
mfc

Je ne pense pas que vous puissiez attacher un ID arbitraire à des éléments d'une ressource de tableau de texte, si c'est ce que vous utilisez.

Je pense que le moyen le plus simple d’attacher un tel identifiant serait soit de coder en dur (si vous utilisez une ressource texte statique), soit de construire de manière dynamique (si vous obtenez les chaînes au moment de l’exécution) un mappage à partir de (position de la chaîne dans un tableau) - > (clé primaire).

EDIT: D'un autre côté, Mojo Risin a un point: vous devez vérifier si l'API CursorAdapter fait déjà ce dont vous avez besoin.

0
Cephron

Andrew Salut, ça fait longtemps mais ça vaut la peine d'écrire.

Vous pouvez définir une balise pour chaque ligne lorsque vous gonflez spinnerLayout in SpinnerAdapter :

spinnerView = inflater.inflate(spinnerLayout, parent, false);
spinnerView.setTag("Your Tag");

Et puis vous pouvez obtenir le tag avec:

yourSpinner.getSelectedView().getTag();
0
Arash