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

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

一、在res/layout里布局数组

代码ide


<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" />
   post

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

二、在res/layout里 放入 一个要用pull解析的.xml文件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>ci

 <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>
-------------------------------------get

三、在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; }  }

相关文章
相关标签/搜索