Piuttosto che il metodo dual-array, perché non riempire programmaticamente il tuo ArrayAdapter con oggetti di tipo noto e usarlo. Ho scritto un tutorial di natura simile (link in basso) che fa questo. La premessa di base è quella di creare una serie di oggetti Java, raccontare lo spinner e quindi utilizzare tali oggetti direttamente dalla classe spinner. Nel mio esempio ho un oggetto che rappresenta uno "Stato", che è definito come segue:
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 + ")");
}
}
Quindi è possibile compilare un filatore con una serie di queste classi come segue:
// 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);
è possibile recuperare l'articolo selezionato come segue:
State st = (State)spinner.getSelectedItem();
E ora si ha una classe Java autentica con cui lavorare. Se si desidera intercettare quando il valore del filatore cambia, implementare semplicemente OnItemSelectedListener e aggiungere i metodi appropriati per gestire gli eventi.
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)
{
}
Potete trovare l'intero tutorial qui: http://www.katr.com/article_android_spinner01.php
anche se non funziona ... mi piace la semplicità di quel pensiero – kritzikratzi