android开发步步为营之23:Spinner进阶绑定包含key和value的对象

Spinner一般绑定字符串数组就可以了,比如之前 的做法 ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(
                this, R.array.fruit, android.R.layout.simple_spinner_item);,有时候,我们需要绑定一个对象,比如显示的时候,显示value,但是程序需要获取的是key值,这个时候,我们就需要绑定自定义的对象。试验场景:证件类型下拉框,显示给用户看的是身份证、护照、户口本等等的文字,但是我们需要记录数据库的是对应的key 比如0,1,2。
  一、设计Activity SpinnerKeyValueActivity
 /**
 *
 */
package com.figo.helloworld;
 
import java.util.ArrayList;
import java.util.List;
import android.view.View;
import android.app.Activity;
import android.os.Bundle;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.Spinner;
import android.widget.TextView;
 
/**
 * @author zhuzhifei
 *
 */
public class SpinnerKeyValueActivity extends Activity {
 
private Spinner spcerticatetype;
private TextView tvcerticatetype;
@Override
protected void onCreate(Bundle savedInstanceState) {
          // TODO Auto-generated method stub
          super.onCreate(savedInstanceState);
          //设置页面
          setContentView(R.layout.spinnerkeyvalue);
          spcerticatetype=(Spinner)findViewById(R.id.spcerticatetype);
          tvcerticatetype=(TextView)findViewById(R.id.tvcerticatetype);
          //绑定数据到spinner
          BindData();
}
    //绑定数据到spinner
private void BindData()
{
          // 设置证件类型
          List<SpinnerItem> lst = new ArrayList<SpinnerItem>();
          SpinnerItem item0 = new SpinnerItem("0", "身份证");
          SpinnerItem item1 = new SpinnerItem("1", "护照");
          SpinnerItem item2 = new SpinnerItem("2", "军官证");
          SpinnerItem item3 = new SpinnerItem("3", "士兵证");
          SpinnerItem item4 = new SpinnerItem("4", "回乡证");
          SpinnerItem item5 = new SpinnerItem("5", "临时身份证");
          SpinnerItem item6 = new SpinnerItem("6", "户口本");
          SpinnerItem item7 = new SpinnerItem("7", "其他");
          SpinnerItem item8 = new SpinnerItem("8", "外国人居留证");
          SpinnerItem item9 = new SpinnerItem("9", "警官证");
          lst.add(item0);
          lst.add(item1);
          lst.add(item2);
          lst.add(item3);
          lst.add(item4);
          lst.add(item5);
          lst.add(item6);
          lst.add(item7);
          lst.add(item8);
          lst.add(item9);
          ArrayAdapter<SpinnerItem> aradapter = new ArrayAdapter<SpinnerItem>(
                             this.getApplicationContext(),
                             android.R.layout.simple_spinner_item, lst);
          aradapter
          .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
          spcerticatetype.setAdapter(aradapter);
    //选中某个选项后,添加事件
          spcerticatetype.setOnItemSelectedListener(
 
                new OnItemSelectedListener() {
                    public void onItemSelected(
                            AdapterView<?> parent, View view, int position, long id) {
                    SpinnerItem item = (SpinnerItem) spcerticatetype.getSelectedItem();
                    tvcerticatetype.setText("您选择的是:key="+item.Key+",value="+item.Value);
                    }
                    public void onNothingSelected(AdapterView<?> parent) {
                    }
 
                });
 
 
}
// 定义下拉框选项
public class SpinnerItem {
          private String Key = "";
          private String Value = "";
 
          public SpinnerItem() {
                   Key = "";
                   Value = "";
          }
 
          public SpinnerItem(String _Key, String _Value) {
                   Key = _Key;
                   Value = _Value;
          }
 
          @Override
          public String toString() {
                   // 为什么要重写toString()呢?因为适配器在显示数据的时候,如果传入适配器的对象不是字符串的情况下,直接就使用对象.toString()
                   // TODO Auto-generated method stub
                   return Value;
          }
 
          public String GetKey() {
                   return Key;
          }
 
          public String GetValue() {
                   return Value;
          }
}
 
}
 
二、运行效果
 
 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。