用下拉列表选中一个省或市弹出相应的市或区

//用2个Spinner 第一个下拉列表选择省或市
//第二个Spinner显示相应的市或区

1、在res/layout里布局

代码


<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <Spinner
        android:id="@+id/province_spinner"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
   
    <Spinner
        android:id="@+id/city_spinner"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" />
   

</LinearLayout>
----------------------------------

2、在res/layout里 放入 一个要用pull解析的.xml文件

代码 如:

<?xml version="1.0" encoding="UTF-8"?>
<citylist>
 <p p_id = "01">
 <pn>北京</pn>
 <c c_id="0101"><cn>北京</cn>
  <d d_id="101010100">北京</d>
  <d d_id="101010200">海淀</d>
  <d d_id="101010300">朝阳</d>
  <d d_id="101010400">顺义</d>
  <d d_id="101010500">怀柔</d>
  <d d_id="101010600">通州</d>
  <d d_id="101010700">昌平</d>
  <d d_id="101010800">延庆</d>
  <d d_id="101010900">丰台</d>
  <d d_id="101011000">石景山</d>
  <d d_id="101011100">大兴</d>
  <d d_id="101011200">房山</d>
  <d d_id="101011300">密云</d>
  <d d_id="101011400">门头沟</d>
  <d d_id="101011500">平谷</d>
 </c>
 </p>

 <p p_id = "02">
 <pn>上海</pn>
  <c c_id="0201"><cn>上海</cn>
    <d d_id="101020100">上海</d>
    <d d_id="101020200">闵行</d>
    <d d_id="101020300">宝山</d>
    <d d_id="101020500">嘉定</d>
    <d d_id="101020600">浦东南汇</d>
    <d d_id="101020700">金山</d>
    <d d_id="101020800">青浦</d>
    <d d_id="101020900">松江</d>
    <d d_id="101021000">奉贤</d>
    <d d_id="101021100">崇明</d>
    <d d_id="101021200">徐家汇</d>
    <d d_id="101021300">浦东</d>
   </c>
  </p>
</citylist>
-------------------------------------

3、在MainActivity 里 实现 功能

代码

public class MainActivity extends Activity {
//声明2个适配器 对象
private ArrayAdapter<String> p_adapter;
private ArrayAdapter<String> c_adapter;
//声明省 和 市的 Spinner 对象
private Spinner provice_sp;
private Spinner city_sp;
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  provice_sp = (Spinner) this.findViewById(R.id.province_spinner);
  city_sp = (Spinner) this.findViewById(R.id.city_spinner);
 
//用getResources方法.getXml方法 来找到res/目录 下的xml文件 
  XmlPullParser parser = getResources().getXml(R.layout.citys_weather);
  //把map 转换 成 ArrayAdapter 可以 放的 类型
  final Map<String,List<String>> map = Provice_city(parser);
//定义一个Set集合 来装 map里面保存的  -- 键
//keySet方法获取 -- 键
  Set<String> provice_set = map.keySet();
//因为ArrayAdapter第三个参数 的类型为List或 数组类型
//所以需要把Set集合 保存到List集合 中
  List<String> provice_list = new ArrayList<String>(provice_set);
  
  
  p_adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,provice_list);
  provice_sp.setAdapter(p_adapter);
  
  c_adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1);
  city_sp.setAdapter(c_adapter);
  //用一个 map 集合 来存放 省(键值) 城市(List集合)
  
  provice_sp.setOnItemSelectedListener(new OnItemSelectedListener() {

   @Override
   public void onItemSelected(AdapterView<?> parent, View view,
     int postion, long id) {
    // TODO Auto-generated method stub
//清空前面的 数据
    c_adapter.clear();
//获取 选中 省的对象
    String s = parent.getSelectedItem().toString();
//获取 键 -- 对应的 值
    c_adapter.addAll(map.get(s));
   }

   @Override
   public void onNothingSelected(AdapterView<?> arg0) {
    // TODO Auto-generated method stub
   }
  });
 }
 
 //pull 解析 省 和 城市 的xml 文件
 public Map<String, List<String>> Provice_city(XmlPullParser parser) {
  Map<String, List<String>> map = new HashMap<String, List<String>>();
  List<String> city_list = null;
  try {
   int type = parser.getEventType();
   while(type !=XmlPullParser.END_DOCUMENT){
    switch(type){
    case XmlPullParser.START_DOCUMENT:
     break;
    case XmlPullParser.START_TAG:
     if("p".equals(parser.getName())){
      city_list = new ArrayList<String>();
     }else if("pn".equals(parser.getName())){
      map.put(parser.nextText(), city_list);
     }else if("d".equals(parser.getName())){
      city_list.add(parser.nextText());
     }
     break;
    case XmlPullParser.END_TAG:
     if("p".equals(parser.getName())){
      city_list = null;
     }
     break;
    }
    type = parser.next();
   }
  } catch (Exception e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  return map;
 }
 
 
}

 

 

 

 

你可能感兴趣的:(用下拉列表选中一个省或市弹出相应的市或区)