Plutôt que d'utiliser la méthode du double tableau, pourquoi ne pas remplir votre ArrayAdapter de façon programmatique avec des objets d'un type connu et l'utiliser. J'ai écrit un tutoriel de nature similaire (lien en bas de page) qui fait cela. Le principe de base est de créer un tableau d'objets Java, d'en informer le spinner, puis d'utiliser ces objets directement depuis la classe du spinner. Dans mon exemple, j'ai un objet représentant un "State" qui est défini comme suit :
package com.katr.spinnerdemo;
public class State {
// Okay, full acknowledgment that public members are not a good idea, however
// this is a Spinner demo not an exercise in java best practices.
public int id = 0;
public String name = "";
public String abbrev = "";
// A simple constructor for populating our member variables for this tutorial.
public State( int _id, String _name, String _abbrev )
{
id = _id;
name = _name;
abbrev = _abbrev;
}
// The toString method is extremely important to making this class work with a Spinner
// (or ListView) object because this is the method called when it is trying to represent
// this object within the control. If you do not have a toString() method, you WILL
// get an exception.
public String toString()
{
return( name + " (" + abbrev + ")" );
}
}
Vous pouvez alors remplir un spinner avec un tableau de ces classes comme suit :
// Step 1: Locate our spinner control and save it to the class for convenience
// You could get it every time, I'm just being lazy... :-)
spinner = (Spinner)this.findViewById(R.id.Spinner01);
// Step 2: Create and fill an ArrayAdapter with a bunch of "State" objects
ArrayAdapter spinnerArrayAdapter = new ArrayAdapter(this,
android.R.layout.simple_spinner_item, new State[] {
new State( 1, "Minnesota", "MN" ),
new State( 99, "Wisconsin", "WI" ),
new State( 53, "Utah", "UT" ),
new State( 153, "Texas", "TX" )
});
// Step 3: Tell the spinner about our adapter
spinner.setAdapter(spinnerArrayAdapter);
Vous pouvez récupérer l'élément sélectionné comme suit :
State st = (State)spinner.getSelectedItem();
Et maintenant vous avez une véritable classe Java avec laquelle travailler. Si vous voulez intercepter les changements de valeur du spinner, il suffit d'implémenter le OnItemSelectedListener et d'ajouter les méthodes appropriées pour gérer les événements.
public void onItemSelected(AdapterView<?> parent, View view, int position, long id)
{
// Get the currently selected State object from the spinner
State st = (State)spinner.getSelectedItem();
// Now do something with it.
}
public void onNothingSelected(AdapterView<?> parent )
{
}
Vous pouvez trouver le tutoriel complet ici : http://www.katr.com/article_android_spinner01.php
1 votes
Même si ça ne marche pas... j'aime la simplicité de cette pensée.