android基本控件示例兩個Spinner下拉列表的關聯(04)

//兩個下拉列表Spinner的關聯
public class MainActivity extends Activity {
	private Spinner provice_sp;
	private Spinner city_sp;
	private ArrayAdapter<String> provice_adapter;
	private ArrayAdapter<String> city_adapter;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		provice_sp = (Spinner) this.findViewById(R.id.provice_sp);
		city_sp = (Spinner) this.findViewById(R.id.city_sp);
		// 從xml文件中加載數據給適配器綁定數據
		XmlPullParser parser = getResources().getXml(R.xml.citys_weather);
		final Map<String, List<String>> dataMap = parserXMLData(parser);
		// 建適配器//加載省份的spinner數據
		Set<String> set = dataMap.keySet();// 省份做爲鍵值
		// 由於適配器不能放集合,但能夠放list數組,因此轉換爲list
		List<String> provicelist = new ArrayList<String>(set);
		provice_adapter = new ArrayAdapter<String>(this,
				android.R.layout.simple_list_item_1, provicelist);
		provice_sp.setAdapter(provice_adapter);// 關聯綁定適配器
		city_adapter = new ArrayAdapter<String>(this,
				android.R.layout.simple_list_item_1);
		// 城市先不給數據源,先關聯綁定適配器,數據下面再給
		city_sp.setAdapter(city_adapter);
		// 設置監聽,點擊省份的時候產生事件
		provice_sp.setOnItemSelectedListener(new OnItemSelectedListener() {

			@Override
			public void onItemSelected(AdapterView<?> parent, View view,
					int position, long id) {
				// 這裏addAll會報錯,改版本就行,它是高版本的,因此要改版本號
				city_adapter.clear();// 每次都清空前面點擊後添加的內容,不然他會累積
				// 法1
				String name = parent.getSelectedItem().toString();
				// 法2://String name=provice_adapter.getItem(position);
				// 法3://String
				// name=parent.getItemAtPosition(position).toString();
				city_adapter.addAll(dataMap.get(name));//省名做爲鍵,經過鍵就能夠得到該省的城市
			}

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

			}
		});
	}

	private Map<String, List<String>> parserXMLData(XmlPullParser parser) {
		Map<String, List<String>> map = new HashMap<String, List<String>>();
		List<String> citylist = null;
		try {
			int event = parser.getEventType();
			while (event != XmlPullParser.END_DOCUMENT) {
				switch (event) {
				case XmlPullParser.START_DOCUMENT:
					break;
				// 注意START_DOCUMENT只執行一次,因此不能在這裏實例化城市,由於p循環調用的
				case XmlPullParser.START_TAG:
					if ("p".equals(parser.getName())) {
						// 進入時實例化城市集合
						citylist = new ArrayList<String>();
					}
					if ("pn".equals(parser.getName())) {
						map.put(parser.nextText(), citylist);// list在後面再加
					}
					if ("d".equals(parser.getName())) {
						citylist.add(parser.nextText());
					}

					break;
				case XmlPullParser.END_TAG:
					if ("p".equals(parser.getName())) {
						citylist = null;
					}
					break;
				}
				event = parser.next();
			}
		} catch (XmlPullParserException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		return map;
	}
}
//佈局文件:相對佈局

    <Spinner
        android:id="@+id/provice_sp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="" />
    <Spinner
        android:id="@+id/city_sp"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_below="@+id/provice_sp"
        android:text="" />
 //文件citys_weather.xml
 <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>
相關文章
相關標籤/搜索