android中的spinner控件和html中的select标签比较相似,我们都知道select标签中每个选项都可以设置key值和value值,key值用于显示,value值为实际取值,但是在android的spinner控件中没有这个功能的直接实现,实际上android的spinner功能更加强大,只是需要我们去稍作修改,spinner的每个选项都可以是一个对象,显示什么值取什么值都是我们自己控制的,我们选择的也就可以是一个复杂的数据内容,而不像select一样只是一个简单的字符串。有适配器在显示与数据之间建立了一个桥梁,所以显示与取值都是由这个适配器控制的,getView'就是控制你要显示的内容,getItem就是获取选择的对象。如果你不想自定义适配器,那么就自定义对象,我们给spinner常用的适配器就是ArrayAdapter,可以看到ArrayAdapter中的实现就是判断传入对象是否是字符串如果是字符串直接显示,如果不是就转化为字符串显示,这样就好了,我们自定义的对象中只要重写toString()方法,这个值就是要显示的内容,要实现key、value的功能就自定义如下的对象
<pre name="code" class="java">public class KeyValue {
private String key;
private String value;
public KeyValue() {
super();
}
public KeyValue(String key, String value) {
super();
this.key = key;
this.value = value;
}
/**
* @return the key
*/
public String getKey() {
return key;
}
/**
* @param key the key to set
*/
public void setKey(String key) {
this.key = key;
}
/**
* @return the value
*/
public String getValue() {
return value;
}
/**
* @param value the value to set
*/
public void setValue(String value) {
this.value = value;
}
//这里是关键,spinner选项中显示什么值就看这个方法怎么实现
@Override
public String toString() {
return key==null?"":key.toString();
}
}
使用的时候如下
private static KeyValue[] taskStatus = new NameValue[2]
static{
taskStatus[0]=new NameValue("完成","finish");
taskStatus[1]=new NameValue("驳回","reject");
}
Spinner taskStatusSpinner = (Spinner) view.findViewById(R.id.task_status);
ArrayAdapter<NameValue> adapter = new ArrayAdapter<NameValue>(this,taskStatus);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
taskStatusSpinner.setAdapter(adapter);
取值的时候可以这样取
KeyValue taskStatus = (KeyValue) taskStatusSpinner.getSelectedItem();
String value = taskStatus.getValue()
这样页面显示的就是完成和驳回,取到的值就是"finish"或者"reject"了
本人初学android,因为一个项目中大量用到了这样的功能,所以想到了这个方法,不知道有没有更好的办法,欢迎大神指导。