实现的效果图如下
其中 难点在于 xml 的解析,以及两个listview 的交互
解析xml
public class XmlParserHandler extends DefaultHandler {
/** * 存储所有的解析对象 */
private List<ProvinceModel> provinceList = new ArrayList<ProvinceModel>();
public XmlParserHandler() { }
public List<ProvinceModel> getDataList() { return provinceList; }
@Override
public void startDocument() throws SAXException { // 当读到第一个开始标签的时候,会触发这个方法 }
ProvinceModel provinceModel = new ProvinceModel();
CityModel cityModel = new CityModel();
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException
{ // 当遇到开始标记的时候,调用这个方法
if (qName.equals("province")) {
provinceModel = new ProvinceModel();
provinceModel.setName(attributes.getValue(0));
provinceModel.setCityList(new ArrayList<CityModel>());
}
else if (qName.equals("city")) {
cityModel = new CityModel();
cityModel.setName(attributes.getValue(0)); } }
@Override
public void endElement(String uri, String localName, String qName) throws SAXException {
// 遇到结束标记的时候,会调用这个方法
if (qName.equals("city")) {
provinceModel.getCityList().add(cityModel);
} else if (qName.equals("province")) {
provinceList.add(provinceModel); } }
@Override
public void characters(char[] ch, int start, int length) throws SAXException { }
}
两个listView 数据交互
{CSDN:CODE:
mainlist.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
selectSE=position;
initAdapter(mCitisDatasMap.get(mProvinceDatas[position]));
mainAdapter.setSelectItem(position);
mainAdapter.notifyDataSetChanged();
}
});
morelist.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
//Toast.makeText(context.getActivity(), mProvinceDatas[selectSE]+mCitisDatasMap.get(mProvinceDatas[selectSE])[position], 0).show();
moreAdapter.setSelectItem(position);
moreAdapter.notifyDataSetChanged();
context.setCityName(mCitisDatasMap.get(mProvinceDatas[selectSE])[position]);
SelectCity.this.dismiss();
}
});
}
mainlist.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
selectSE=position;
initAdapter(mCitisDatasMap.get(mProvinceDatas[position]));
mainAdapter.setSelectItem(position);
mainAdapter.notifyDataSetChanged();
}
});
morelist.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
//Toast.makeText(context.getActivity(), mProvinceDatas[selectSE]+mCitisDatasMap.get(mProvinceDatas[selectSE])[position], 0).show();
moreAdapter.setSelectItem(position);
moreAdapter.notifyDataSetChanged();
context.setCityName(mCitisDatasMap.get(mProvinceDatas[selectSE])[position]);
SelectCity.this.dismiss();
}
});
}