通过xml解析获得数据源,通过Spinner进行三级的联动显示,以下为源代码
Mainactivity代码
public class MainActivity extends Activity {
Spinner spinner1, spinner2, spinner3;
Province province = null;
City city = null;
List<Province> list = new ArrayList<Province>();
List<String> list1 = new ArrayList<String>();
List<String> list2 = new ArrayList<String>();
List<String> list3 = new ArrayList<String>();
int index1;
int index2;
ArrayAdapter<String> arrayAdapter1;
ArrayAdapter<String> arrayAdapter2;
ArrayAdapter<String> arrayAdapter3;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
spinner2 = (Spinner) findViewById(R.id.s2);
spinner1 = (Spinner) findViewById(R.id.s1);
spinner3 = (Spinner) findViewById(R.id.s3);
parser1();
final int layOutId = android.R.layout.simple_list_item_1;
for (Province tp : list) {
list1.add(tp.getName());
}
arrayAdapter1 = new ArrayAdapter<String>(this,
layOutId, list1);
for (City tc : list.get(0).getCitys()) {
list2.add(tc.getName());
}
arrayAdapter2 = new ArrayAdapter<String>(this,
layOutId, list2);
for (String ts : list.get(0).getCitys().get(0).getDistricts()) {
list3.add(ts);
}
arrayAdapter3 = new ArrayAdapter<String>(this,
layOutId, list3);
spinner1.setAdapter(arrayAdapter1);
spinner1.setSelection(0, true);
spinner2.setAdapter(arrayAdapter2);
spinner2.setSelection(0, true);
spinner3.setAdapter(arrayAdapter3);
spinner3.setSelection(0, true);
spinner1.setOnItemSelectedListener(new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
index1 = position;
arrayAdapter2.clear();
arrayAdapter3.clear();
province = list.get(index1);
for (City tc : province.getCitys()) {
list2.add(tc.getName());
}
for (String ts : province.getCitys().get(0).getDistricts()) {
list3.add(ts);
}
arrayAdapter2 = new ArrayAdapter<String>(MainActivity.this,
layOutId,list2);
spinner2.setAdapter(arrayAdapter2);
arrayAdapter3 = new ArrayAdapter<String>(MainActivity.this,
layOutId, list3);
spinner3.setAdapter(arrayAdapter3);
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
spinner2.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
arrayAdapter3.clear();
index2 = position;
city = list.get(index1).getCitys().get(index2);
for (String ts : city.getDistricts()) {
list3.add(ts);
}
arrayAdapter3 = new ArrayAdapter<String>(MainActivity.this,
layOutId, list3);
spinner3.setAdapter(arrayAdapter3);
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
}
});
}
public void parser1() {
XmlResourceParser parser = getResources().getXml(R.xml.citys_weather);
try {
int type = parser.getEventType();
while (type != XmlResourceParser.END_DOCUMENT) {
String tag = parser.getName();
switch (type) {
case XmlResourceParser.START_DOCUMENT:
list = new ArrayList<Province>();
break;
case XmlResourceParser.START_TAG:
switch (tag) {
case "pn":
province = new Province();
province.setName(parser.nextText());
break;
case "cn":
city = new City();
city.setName(parser.nextText());
break;
case "d":
city.getDistricts().add(parser.nextText());
break;
default:
break;
}
break;
case XmlResourceParser.END_TAG:
if ("c".equals(tag)) {
province.getCitys().add(city);
}
if ("p".equals(tag)) {
list.add(province);
}
break;
default:
break;
}
type = parser.next();
}
} catch (XmlPullParserException e) {
e.printStackTrace();
}
catch (NumberFormatException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
province代码
public class Province {
private String name;
private List<City> citys;
public Province() {
citys = new ArrayList<City>();
}
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;
}
}
City代码
public class City {
private String name;
private List<String> districts;
public City(){
districts = new ArrayList<String>();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<String> getDistricts() {
return districts;
}
public void setDistricts(List<String> districts) {
this.districts = districts;
}
}
布局文件
<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"
tools:context="${relativePackage}.${activityClass}" >
<Spinner
android:id="@+id/s1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:spinnerMode="dropdown" >
</Spinner>
<Spinner
android:id="@+id/s2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:spinnerMode="dropdown" >
</Spinner>
<Spinner
android:id="@+id/s3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:spinnerMode="dropdown" >
</Spinner>
</LinearLayout>