使用pull解析和spinner实现省市地区三级联动的效果
来源:互联网 发布:网络维护基本知识 编辑:程序博客网 时间:2024/06/05 05:13
一、xml资源文件
<?xml version="1.0" encoding="UTF-8"?> <!-- START_DOCUMET:第一个节点 END_DOCUMET:尾节点 START_TAG:其他的首部的节点 p pn c cn... END_TAG:其他的尾部的节点 </p> </c> ... --><citylist> <p p_id="01"> <pn>北京</pn> <c c_id="0101"> <cn>北京</cn> <d d_id="101010101">北京</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>
xml文件只选取了部分,完整文件包括中国的所有省市地区。
二、布局文件
<RelativeLayout 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:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity" > <Spinner android:id="@+id/spinner01" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <Spinner android:id="@+id/spinner02" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@id/spinner01" /> <Spinner android:id="@+id/spinner03" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_toRightOf="@id/spinner02" /></RelativeLayout>
三、城市类
package com.example.sjliandong;import java.util.ArrayList;import java.util.List;public class City { private String id; private String name; private List<District> districts; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public List<District> getDistricts() { return districts; } public void setDistricts(List<District> districts) { this.districts = districts; } @Override public String toString() { return name; }}
四、地区类
package com.example.sjliandong;public class District { private String id; private String name; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return name; }}
五、省类
package com.example.sjliandong;import java.util.*;public class Provence { private String id; private String name; private List<City> citys; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public List<City> getCitys() { return citys; } public void setCitys(List<City> citys) { this.citys = citys; } @Override public String toString() { return name; }}
六、Activity类
package com.example.sjliandong;import java.io.IOException;import java.io.InputStream;import java.util.ArrayList;import java.util.List;import org.xmlpull.v1.XmlPullParser;import org.xmlpull.v1.XmlPullParserException;import org.xmlpull.v1.XmlPullParserFactory;import android.os.Bundle;import android.app.Activity;import android.content.res.Resources;import android.view.Menu;import android.view.View;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.AdapterView.OnItemSelectedListener;import android.widget.ArrayAdapter;import android.widget.Spinner;public class MainActivity extends Activity { private List<Provence> provences; private Provence provence; ArrayAdapter<Provence> adapter01; ArrayAdapter<City> adapter02; ArrayAdapter<District> adapter03; private Spinner spinner01, spinner02, spinner03; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); spinner01 = (Spinner) findViewById(R.id.spinner01); spinner02 = (Spinner) findViewById(R.id.spinner02); spinner03 = (Spinner) findViewById(R.id.spinner03); try { provences = getProvinces(); } catch (XmlPullParserException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } adapter01 = new ArrayAdapter<Provence>(this, android.R.layout.simple_list_item_1, provences); spinner01.setAdapter(adapter01); spinner01.setSelection(0, true); adapter02 = new ArrayAdapter<City>(this, android.R.layout.simple_list_item_1, provences.get(0) .getCitys()); spinner02.setAdapter(adapter02); spinner02.setSelection(0, true); adapter03 = new ArrayAdapter<District>(this, android.R.layout.simple_list_item_1, provences.get(0) .getCitys().get(0).getDistricts()); spinner03.setAdapter(adapter03); spinner03.setSelection(0, true); spinner01.setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { provence = provences.get(position); adapter02 = new ArrayAdapter<City>(MainActivity.this, android.R.layout.simple_list_item_1, provences.get( position).getCitys()); spinner02.setAdapter(adapter02); } @Override public void onNothingSelected(AdapterView<?> parent) { } }); spinner02.setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { adapter03 = new ArrayAdapter<District>(MainActivity.this, android.R.layout.simple_list_item_1, provence.getCitys().get(position) .getDistricts()); spinner03.setAdapter(adapter03); } @Override public void onNothingSelected(AdapterView<?> parent) { // TODO Auto-generated method stub } }); } public List<Provence> getProvinces() throws XmlPullParserException, IOException { List<Provence> provinces = null; Provence province = null; List<City> citys = null; City city = null; List<District> districts = null; District district = null; Resources resources = getResources(); InputStream in = resources.openRawResource(R.raw.citys_weather); XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); XmlPullParser parser = factory.newPullParser(); parser.setInput(in, "utf-8"); int event = parser.getEventType(); while (event != XmlPullParser.END_DOCUMENT) { switch (event) { case XmlPullParser.START_DOCUMENT: provinces = new ArrayList<Provence>(); break; case XmlPullParser.START_TAG: String tagName = parser.getName(); if ("p".equals(tagName)) { province = new Provence(); citys = new ArrayList<City>(); int count = parser.getAttributeCount(); for (int i = 0; i < count; i++) { String attrName = parser.getAttributeName(i); String attrValue = parser.getAttributeValue(i); if ("p_id".equals(attrName)) province.setId(attrValue); } } if ("pn".equals(tagName)) { province.setName(parser.nextText()); } if ("c".equals(tagName)) { city = new City(); districts = new ArrayList<District>(); int count = parser.getAttributeCount(); for (int i = 0; i < count; i++) { String attrName = parser.getAttributeName(i); String attrValue = parser.getAttributeValue(i); if ("c_id".equals(attrName)) city.setId(attrValue); } } if ("cn".equals(tagName)) { city.setName(parser.nextText()); } if ("d".equals(tagName)) { district = new District(); int count = parser.getAttributeCount(); for (int i = 0; i < count; i++) { String attrName = parser.getAttributeName(i); String attrValue = parser.getAttributeValue(i); if ("d_id".equals(attrName)) district.setId(attrValue); } district.setName(parser.nextText()); districts.add(district); } break; case XmlPullParser.END_TAG: if ("c".equals(parser.getName())) { city.setDistricts(districts); citys.add(city); } if ("p".equals(parser.getName())) { province.setCitys(citys); provinces.add(province); } break; } event = parser.next(); } return provinces; }}
七、效果:
完整项目下载地址:github spinner小练习
4 0
- 使用pull解析和spinner实现省市地区三级联动的效果
- 使用Spinner实现省市三级联动
- JS实现省市地区三级联动
- 使用javascript解析xml实现省市县三级联动
- JavaScript实现省市县三级联动效果~~~
- JavaScript实现省市县三级联动效果~~~
- js--纯js实现省市地区三级联动
- ThinkPHP利用Ajax实现省市县地区三级联动
- 使用json解决 《三级联动》(省市县) 含地区编号
- Android实现省市区三级联动效果Spinner
- 基于Spinner的省市县三级联动选择显示
- Spinner实现三级联动
- Vue如何使用vue-area-linkage实现地址三级联动效果 很多时候我们需要使用地址三级联动,即省市区三级联动。网上有很多插件,在此介绍Vue的一款地区联动插件:vue-ar
- 使用三层实现省市县三级联动(利用ajax实现无刷新效果)
- Spinner的三级联动
- 省市县三级联动,JS 实现,效果还不错
- 地区三级联动实现方式
- 具有三级联动效果的地区选择 angulagerJS
- 向指定服务器URL 发送POST方法的请求并用JSON表示
- ajax上
- How to enter text into a textfield in a web view using UIAutomation
- svn常用命令
- 浅谈设计模式之四——Singleton模式
- 使用pull解析和spinner实现省市地区三级联动的效果
- 基于javascript的div浮动效果代码
- C# 数组的复制
- C++沉思录第九章的练习
- 网络透视技术资料及学习笔记
- Lua中的模块与module函数详解
- 《算法的乐趣》终于出版了
- 《C语言及程序设计》程序阅读——参数传递方式:传值与传地址
- UVa 12405 - Scarecrow