MainActivity
```
package com.example.city_spinner;
import java.io.IOException;
import java.util.List;
import org.xmlpull.v1.XmlPullParserException;
import com.example.entity.*;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.widget.*;
import android.widget.AdapterView.OnItemSelectedListener;
public class MainActivity extends Activity {
private Spinner sp_province, sp_city, sp_district;
private List<Province> list;
private int current;
private ArrayAdapter arrprovince;
private ArrayAdapter arrcity;
private ArrayAdapter arrdistrict;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
sp_province = (Spinner) findViewById(R.id.sp_province);
sp_city = (Spinner) findViewById(R.id.sp_city);
sp_district = (Spinner) findViewById(R.id.sp_district);
Parser p = new Parser(this);
try {
list = p.parsercitys();
} catch (XmlPullParserException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println(list);
System.out.println(list.get(0).getCitys());
arrprovince = new ArrayAdapter<Province>(this,
android.R.layout.simple_dropdown_item_1line,
android.R.id.text1, list);
sp_province.setAdapter(arrprovince);
arrcity = new ArrayAdapter<City>(this,
android.R.layout.simple_dropdown_item_1line,
android.R.id.text1, list.get(0).getCitys());
sp_city.setAdapter(arrcity);
arrdistrict = new ArrayAdapter<District>(this,
android.R.layout.simple_dropdown_item_1line,
android.R.id.text1, list.get(0).getCitys().get(0)
.getDistricts());
sp_district.setAdapter(arrdistrict);
//------------设置监听事件
sp_province.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
current = position;
arrcity = new ArrayAdapter<City>(
MainActivity.this,
android.R.layout.simple_dropdown_item_1line,
android.R.id.text1, list.get(position).getCitys());
sp_city.setAdapter(arrcity);
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
sp_city.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
arrdistrict = new ArrayAdapter<District>(
MainActivity.this,
android.R.layout.simple_dropdown_item_1line,
android.R.id.text1, list.get(current).getCitys()
.get(position).getDistricts());
sp_district.setAdapter(arrdistrict);
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
}
}
以下是实体类
City.java
package com.example.entity;
import java.io.Serializable;
import java.util.List;
public class City {
private String name;
private String id;
private List<District>districts;
public City() {
super();
// TODO Auto-generated constructor stub
}
public City(String name, String id, List<District> districts) {
super();
this.name = name;
this.id = id;
this.districts = districts;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public List<District> getDistricts() {
return districts;
}
public void setDistricts(List<District> districts) {
this.districts = districts;
}
@Override
public String toString() {
return name;
}
}
District.java
package com.example.entity;
public class District {
private String id;
private String name;
public District() {
super();
// TODO Auto-generated constructor stub
}
public District(String id, String name) {
super();
this.id = id;
this.name = 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;
}
}
Province.java
package com.example.entity;
import java.util.List;
public class Province {
private String name;
private String id;
private List<City>citys;
public Province() {
super();
// TODO Auto-generated constructor stub
}
public Province(String name, String id, List<City> citys) {
super();
this.name = name;
this.id = id;
this.citys = citys;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public List<City> getCitys() {
return citys;
}
public void setCitys(List<City> citys) {
this.citys = citys;
}
@Override
public String toString() {
return name;
}
}
工具类解析Parser.java
package com.example.entity;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;
import com.example.city_spinner.R;
import android.content.Context;
public class Parser {
private Context context;
public Parser(Context context) {
this.context = context;
}
public List<Province> parsercitys() throws XmlPullParserException,IOException {
Province province = null;
List<Province> provinces = null;
City city = null;
List<City> citys = null;
District district = null;
List<District> districts = null;
XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
XmlPullParser parser = factory.newPullParser();
parser.setInput(
context.getResources().openRawResource(R.raw.citys_weather),
"utf-8");
int event = parser.getEventType();
while (event != XmlPullParser.END_DOCUMENT) {
switch (event) {
case XmlPullParser.START_DOCUMENT:
provinces = new ArrayList<Province>();
break;
case XmlPullParser.START_TAG:
String tagName = parser.getName();
if ("p".equals(tagName)) {
province = new Province();
citys = new ArrayList<City>();
int count = parser.getAttributeCount();
for (int i = 0; i < count; i++) {
String name = parser.getAttributeName(i);
String value = parser.getAttributeValue(i);
if ("id".equals(name))
province.setId(value);
}
} else if ("pn".equals(tagName))
province.setName(parser.nextText());
else if ("c".equals(tagName)) {
city = new City();
districts = new ArrayList<District>();
int count = parser.getAttributeCount();
for (int i = 0; i < count; i++) {
String name = parser.getAttributeName(i);
String value = parser.getAttributeValue(i);
if ("id".equals(name))
city.setId(value);
}
} else if ("cn".equals(tagName))
city.setName(parser.nextText());
else if ("d".equals(tagName)) {
district = new District();
int count = parser.getAttributeCount();
for (int i = 0; i < count; i++) {
String name = parser.getAttributeName(i);
String value = parser.getAttributeValue(i);
if ("id".equals(name))
district.setId(value);
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;
}
}
“`
以下是被解析的xml文件