用下拉列表選中一個省或市彈出相應的市或區

//用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; }  }

相關文章
相關標籤/搜索