而不是双数组方法,为什么不用已知类型的对象以编程方式填充您的 ArrayAdapter 并使用它。我已经写了一个类似性质的教程(底部的链接)来做到这一点。基本前提是创建一个 Java 对象数组,告诉微调器,然后直接从微调器类中使用这些对象。在我的示例中,我有一个表示“状态”的对象,其定义如下:
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 + ")" );
}
}
然后,您可以使用这些类的数组填充微调器,如下所示:
// 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);
您可以按如下方式检索所选项目:
State st = (State)spinner.getSelectedItem();
现在您可以使用一个真正的 Java 类了。如果要在微调器值更改时进行拦截,只需实现 OnItemSelectedListener 并添加适当的方法来处理事件。
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 )
{
}
你可以在这里找到整个教程:
http ://www.katr.com/article_android_spinner01.php