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