AutoCompleteTextView、Spinner

1、AutoCompleteTextView

适配器:adapter
数据资源与控件关联需要适配器(ArrayAdater,SimpleAdapter,BaseAdapter)

获取字符串数组资源并返回数组
String[] data = getResources().getStringArray(R.array.country);

// 1.上下文,this
// 2.布局,自定义布局(根标签为TextView),R.layout.item
// 3、数据源(数组,或集合)
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, data);

使用资源文件创建适配器
// 1.上下文,this
// 2.数组资源的id,R.array.country
// 3.布局文件
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this, R.array.country, android.R.layout.simple_list_item_1);

2、Spinner,下拉列表

Spinner 注册监听器:OnItemSelectedListener

重写OnItemSelected方法,方法参数说明:
// parent:代表Spinner控件
// view:Spinner的每一个列表项
// position:位置,数据在适配器的位置
// id:被选择行的id

在该方法中,使用以下方式获得选中的项目
String s = parent.getItemAtPosition(position).toString();
s = parent.getSelectedItem().toString();
s = adapter.getItem(position).toString();

3、解析xml文件,将xml文件放置到res/xml下

4、刷新适配器:当适配器关联的数据源改变时,应该调用该方法,刷新适配器,可以实现动态刷新列表的功能
adapter.notifyDataSetChanged();

5、DatePicker
DatePickerDialog

一级联动案例:解析xml文件,放置到spinner中
public class MainActivity extends Activity {

 // 数据源
 private String[] provinces = { "北京", "吉林", "四川" };
 private String[][] cities = { { "海淀", "昌平", "朝阳" }, { "长春", "通化", "白城" },
   { "成都", "汶川", "绵阳" } };

 private Spinner mProvince, mCity;
 private ArrayAdapter<String> adapterProvice, adapterCity;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  mProvince = (Spinner) findViewById(R.id.mSpinnerProvince);
  mCity = (Spinner) findViewById(R.id.mSpinnerCity);

  // 创建适配器
  adapterProvice = new ArrayAdapter<String>(this,
    android.R.layout.simple_dropdown_item_1line, provinces);
  // 二级Spinner的数据资源未确定,所以创建适配器无须指定数据源
  adapterCity = new ArrayAdapter<String>(this,
    android.R.layout.simple_dropdown_item_1line);

  // 给Spinner设置适配器
  mProvince.setAdapter(adapterProvice);
  mCity.setAdapter(adapterCity);

  // 省份Spinner注册监听器
  mProvince.setOnItemSelectedListener(new OnItemSelectedListener() {

   @Override
   public void onItemSelected(AdapterView<?> parent, View view,
     int position, long id) {
    // TODO Auto-generated method stub
    // 清空原有数据
    adapterCity.clear();
    // 给适配器添加数据
    adapterCity.addAll(cities[position]);

   }

   @Override
   public void onNothingSelected(AdapterView<?> parent) {
    // TODO Auto-generated method stub

   }
  });
 }

}


三级联动案例:

public class MainActivity extends Activity {
 private Spinner proSpi, citySpi, districSpi;
 private ArrayAdapter<String> proAdapter, cityAdapter, districAdapter;
 private List<String> pIdList, pNameList, cIdList, cNameList, dNameList;

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  proSpi = (Spinner) findViewById(R.id.spinPro);
  citySpi = (Spinner) findViewById(R.id.spinCity);
  districSpi = (Spinner) findViewById(R.id.spinDistrict);

  getProvice();
  proAdapter = new ArrayAdapter<String>(this,
    android.R.layout.simple_dropdown_item_1line, pNameList);
  cityAdapter = new ArrayAdapter<String>(this,
    android.R.layout.simple_dropdown_item_1line);
  districAdapter = new ArrayAdapter<String>(this,
    android.R.layout.simple_dropdown_item_1line);

  proSpi.setAdapter(proAdapter);
  citySpi.setAdapter(cityAdapter);
  districSpi.setAdapter(districAdapter);

  proSpi.setOnItemSelectedListener(new OnItemSelectedListener() {

   @Override
   public void onItemSelected(AdapterView<?> parent, View view,
     int position, long id) {
    String pId = pIdList.get(position);
    getCity(pId);
    cityAdapter.clear();
    cityAdapter.addAll(cNameList);
    
    //在城市改变了之后,区也要改变
    getDistrict(cIdList.get(0));
    districAdapter.clear();
    districAdapter.addAll(dNameList);
   }

   @Override
   public void onNothingSelected(AdapterView<?> parent) {
   }
  });
  citySpi.setOnItemSelectedListener(new OnItemSelectedListener() {

   @Override
   public void onItemSelected(AdapterView<?> parent, View view,
     int position, long id) {
    String cId = cIdList.get(position);
    getDistrict(cId);
    districAdapter.clear();
    districAdapter.addAll(dNameList);
   }


   @Override
   public void onNothingSelected(AdapterView<?> parent) {
   }
  });
 }

 public void getProvice() {
  XmlResourceParser parser = getResources().getXml(R.xml.cities);
  int type;
  try {
   type = parser.getEventType();
   while (type != 1) {
    String tag = parser.getName();
    switch (type) {
    case 0:
     pIdList = new ArrayList<String>();
     pNameList = new ArrayList<String>();
     break;
    case 2:
     if ("p".equals(tag)) {
      String id = parser.getAttributeValue(0);
      pIdList.add(id);
     }
     if ("pn".equals(tag)) {
      pNameList.add(parser.nextText());
     }
     break;
    }
    type = parser.next();
   }
  } catch (Exception e) {
   e.printStackTrace();
  }
 }

 public void getCity(String pId) {
  XmlResourceParser parser = getResources().getXml(R.xml.cities);
  int type;
  try {
   type = parser.getEventType();
   while (type != 1) {
    String tag = parser.getName();
    switch (type) {
    case 0:
     cIdList = new ArrayList<String>();
     cNameList = new ArrayList<String>();
     break;
    case 2:
     if ("c".equals(tag)) {
      String id = parser.getAttributeValue(0);
      if (id.startsWith(pId)) {
       cIdList.add(id);
       parser.nextTag();//要在c还没有执行完的时候就获取下一个标签中的文本
       cNameList.add(parser.nextText());
      }
     }
     break;
    }
    type = parser.next();
   }
  } catch (Exception e) {
   e.printStackTrace();
  }
 }

 public void getDistrict(String cId) {
  XmlResourceParser parser = getResources().getXml(R.xml.cities);
  int type;
  try {
   type = parser.getEventType();
   while (type != 1) {
    String tag = parser.getName();
    switch (type) {
    case 0:
     dNameList = new ArrayList<String>();
     break;
    case 2:
     if ("d".equals(tag)) {
      String did = parser.getAttributeValue(0);
      if("0101".equals(cId)||"0201".equals(cId)||"0301".equals(cId)||"0401".equals(cId)){
       if(cId.substring(0,2).equals(did.substring(3, 5))){
        dNameList.add(parser.nextText());
       }
      }else{
       if(did.substring(3).startsWith(cId)){
        dNameList.add(parser.nextText());
       }
      }
     }
     break;
    }
    type = parser.next();
   }
  } catch (Exception e) {
   e.printStackTrace();
  }
 }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值