省市联动

本文介绍了一个基于Android-PickerView开源库的省市联动实现方法。通过解析XML文件获取省市数据,并使用多级列表存储省市及区县信息,实现了下拉选择器的功能。

今天开发用到了省市联动,记录以下:
用到了开源库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);
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值