layout布局
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#0099CC"
android:scrollbars="vertical"
android:overScrollMode="always"
tools:context=".LoginActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#F5F5F5"
android:layout_margin="5sp"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/location"
android:textSize="12sp" />
<GridLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:columnCount="3">
<Spinner
android:id="@+id/province"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:targetApi="lollipop">
</Spinner>
<Spinner
android:id="@+id/city"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:targetApi="lollipop">
</Spinner>
<Spinner
android:id="@+id/county"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:targetApi="lollipop">
</Spinner>
</GridLayout>
</LinearLayout>
</ScrollView>
java代码:
package com.example.login;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.*;
import java.io.*;
import org.xmlpull.v1.XmlPullParserException;
import java.text.*;
import java.util.*;
public class LoginActivity extends AppCompatActivity {
private Spinner sp_province,sp_city,sp_county;
private ArrayAdapter<Province> provinceArrayAdapter;
private ArrayAdapter<City> cityArrayAdapter;
private ArrayAdapter<County> countyArrayAdapter;
private List<Province> provinces;
private int prov_position;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login_main);
Intent intent=getIntent();
//得到容器视图
sp_city=(Spinner)findViewById(R.id.city);
sp_county=(Spinner)findViewById(R.id.county);
sp_province=(Spinner)findViewById(R.id.province);
//得到解析后的数据
InputStream is = getResources().openRawResource(R.raw.locations);
try { provinces= LocationService.getProvince(is);
}catch (XmlPullParserException |IOException e)
{ e.printStackTrace(); }
//设置省的适配器
provinceArrayAdapter = new ArrayAdapter<Province>(this, android.R.layout.simple_spinner_item, provinces);
sp_province.setAdapter(provinceArrayAdapter);
sp_province.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
prov_position = position;
//设置市的适配器
cityArrayAdapter = new ArrayAdapter<City>(LoginActivity.this, android.R.layout.simple_spinner_item, provinces.get(position).getCitys());
sp_city.setAdapter(cityArrayAdapter);
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
sp_city.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener()
{
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id)
{
//设置地区的适配器
countyArrayAdapter= new ArrayAdapter<County>(LoginActivity.this, android.R.layout.simple_spinner_item, provinces.get(prov_position).getCitys().get(position).getCounties());
sp_county.setAdapter(countyArrayAdapter);
}
@Override
public void onNothingSelected(AdapterView<?> parent)
{
}
});
}
}
city.java
package com.example.login;
import java.util.List;
public class City {
private String id;
private String name;
private List<County> counties;
public City() {
super();
}
public City(String id, String name, List<County> counties) {
super();
this.id = id;
this.name = name;
this.counties = counties;
}
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<County> getCounties() {
return counties;
}
public void setCounties(List<County> counties) {
this.counties = counties;
}
public String toString() {
return name;
}
}
County .java
package com.example.login;
public class County {
private String id;
private String name;
public County() {
super();
}
public County(String id, String name) {
super();
this.id = id;
this.name=name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String toString() {
return name;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
Province .java
package com.example.login;
import java.util.List;
public class Province {
private String id;
private String name;
private List<City> citys;
public Province()
{
super();
}
public Province(String id,String name,List<City> citys)
{
super();
this.name=name;
this.id=id;
this.citys=citys;
}
@Override
public String toString() {
return name;
}
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;
}
}
LocationService .java
package com.example.login;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlPullParserFactory;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
public class LocationService {
public static List<Province> getProvince(InputStream is) throws XmlPullParserException, IOException {
List<Province>provinces =null;
Province province=null;
List<City> cities=null;
City city=null;
List<County> counties=null;
County county=null;
String tagName=null;
//初始化解析器
XmlPullParserFactory factory=XmlPullParserFactory.newInstance();
XmlPullParser parser=factory.newPullParser();
parser.setInput(is,"utf-8");
int event = parser.getEventType();
while(event!=XmlPullParser.END_DOCUMENT)
{
switch (event)
{
case XmlPullParser.START_TAG:
tagName=parser.getName();
if ("citylist".equals(tagName))
{
provinces = new ArrayList<Province>();
}
else if("p".equals(tagName))
{
province=new Province();
cities = new ArrayList<City>();
int count =parser.getAttributeCount();
for(int i=0;i<count;i++)
{
String attName =parser.getAttributeName(i);
String attValue = parser.getAttributeValue(i);
if("p_id".equals(attName))
{
province.setId(attValue);
}
}
}
else if("pn".equals(tagName))
{
province.setName(parser.nextText());
}
else if("c".equals(tagName))
{
city = new City();
counties = new ArrayList<County>();
int count =parser.getAttributeCount();
for(int i=0;i<count;i++)
{
String attName =parser.getAttributeName(i);
String attValue = parser.getAttributeValue(i);
if("c_id".equals(attName))
{
city.setId(attValue);
}
}
}
else if("cn".equals(tagName))
{
city.setName(parser.nextText());
}
else if("d".equals(tagName))
{
county = new County();
int count =parser.getAttributeCount();
for(int i=0;i<count;i++)
{
String attName =parser.getAttributeName(i);
String attValue = parser.getAttributeValue(i);
if("d_id".equals(attName))
{
county.setId(attValue);
}
}
county.setName(parser.nextText());
counties.add(county);
}
break;
case XmlPullParser.END_TAG:
tagName =parser.getName();
if("c".endsWith(tagName))
{
city.setCounties(counties);
cities.add(city);
}
else if("p".equals(tagName))
{
province.setCitys(cities);
provinces.add(province);
}
break;
default:
break;
}
event = parser.next();
}
return provinces;
}
}