今天开发用到了省市联动,记录以下:
用到了开源库Android-PickerView
首先用到一个省市的xml文件,服务器可以下载全名展示的,移动设备下载简称就可以(最近下载csdn都要分,分数已耗光,需要回血)
全名称
适合移动设备的
接下来解析xml文件:
ArrayList<String> options1Items = new ArrayList<>();//省
ArrayList<ArrayList<String>> options2Items = new ArrayList<>();//市
ArrayList<ArrayList<ArrayList<String>>> options3Items = new ArrayList<>();//区
//获取所有省市数据
@Background
void getData() {
try {
InputStream input = getAssets().open("province_data.xml");
XmlPullParser parser = Xml.newPullParser();
parser.setInput(input, "utf-8");
int event = parser.getEventType();
ArrayList<String> options2Items_01 = new ArrayList<>();
ArrayList<String> options3Items_01_01 = new ArrayList<>();
ArrayList<ArrayList<String>> options3Items_01 = new ArrayList<>();
while (event != XmlPullParser.END_DOCUMENT) {
switch (event) {
case XmlPullParser.START_TAG:
switch (parser.getName()) {
case "province":
options1Items.add(parser.getAttributeValue(0));
break;
case "city":
options2Items_01.add(parser.getAttributeValue(0));
break;
case "district":
options3Items_01_01.add(parser.getAttributeValue(0));
break;
}
break;
case XmlPullParser.END_TAG:
switch (parser.getName()) {
case "province":
options2Items.add((ArrayList<String>) options2Items_01.clone());
options2Items_01.clear();
options3Items.add((ArrayList<ArrayList<String>>) options3Items_01.clone());
options3Items_01.clear();
break;
case "city":
options3Items_01.add((ArrayList<String>) options3Items_01_01.clone());
options3Items_01_01.clear();
break;
}
break;
}
event = parser.next();
}
input.close();
initScreen();
} catch (Exception e) {
finish();
}
}
初始化窗口显示即可:
@UiThread
void initScreen() {
af.dismissAllowingStateLoss();
popupWindow = new OptionsPopupWindow(this);
popupWindow.setPicker(options1Items, options2Items, options3Items, true);
// popupWindow.setPicker(options1Items, options2Items, true);
popupWindow.setSelectOptions(1);
//设置选择的三级单位
// popupWindow.setLabels("省", "市", "区");
// popupWindow.setTitle("选择城市");
popupWindow.setCyclic(false);
popupWindow.showAtLocation(getWindow().getDecorView(), Gravity.BOTTOM, 0, 0);
}