Android 省市区街道 四级联动

原文地址 :  

github地址 :四级联动(省、市、区、镇)的地区选择器

json城市数据 : json城市数据,最新更新时间2021/10/31

在此基础上 做了相应的更改

import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.json.JSONArray;
import org.json.JSONObject;

public class MainActivity extends AppCompatActivity {

    private List<RegionBean> provinceBeans;//省份数据
    private String mProvince;//省
    private String mCity;//市
    private String mZone;//区
    private String mArea;//街道
    private RegionSelectDialog regionSelectDialog;//弹窗

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //id
        final TextView tv_region=findViewById(R.id.tv_region);

        //点击弹出地址选择
        tv_region.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                //显示
                regionSelectDialog.showDialog();
            }
        });

        //初始化时,传入RegionLevel设置三级联动or四级联动)
        regionSelectDialog = new RegionSelectDialog(this, RegionLevel.LEVEL_FOUR);
//        regionSelectDialog.setLevel();



        //json数据 省
        String province_data_json = JsonParser.getJson(this, "province.json");
        //json转换list
        List<Map<String, Object>> province_maps = getlistForJson(province_data_json);
        //获取省级数据
        provinceBeans = new ArrayList<>();
        for (int i = 0; i < province_maps.size(); i++) {
            RegionBean provinceBean=new RegionBean(""+province_maps.get(i).get("code"),""+province_maps.get(i).get("name"));
            provinceBeans.add(provinceBean);
        }
        //此步骤必须,否则无法显示
        regionSelectDialog.setOnRegionDataSetListenr(new OnRegionDataSetListener() {

            //必须有返回值
            @Override
            public List<RegionBean> setProvinceList() {
                return provinceBeans;
            }
            //必须有返回值
            @Override
            public List<RegionBean> setOnProvinceSelected(RegionBean regionBean) {
                //接收选中的省份
                mProvince = regionBean.getName();
                //获取当前省份的id
                String provinceId = regionBean.getId();

                //json数据 市
                String city_json = JsonParser.getJson(MainActivity.this, "city.json");
                //json转换list
                List<Map<String, Object>> city_maps = getlistForJson(city_json);

                //返回显示的城市
                List<RegionBean> cityBeans=new ArrayList<>();
                for (int i = 0; i < city_maps.size(); i++) {
                    RegionBean cityBean=new RegionBean(""+city_maps.get(i).get("code"),""+city_maps.get(i).get("name"));
                    //当前省份下的城市
                    if (provinceId.equals(city_maps.get(i).get("provinceCode"))){
                        cityBeans.add(cityBean);
                    }
                }
                return cityBeans;
            }
            //必须有返回值
            @Override
            public List<RegionBean> setOnCitySelected(RegionBean regionBean) {
                //接收选中的城市
                mCity = regionBean.getName();
                //获取当前城市的id
                String cityId = regionBean.getId();
                Log.e("dsadsasad",cityId);

                //json数据 区
                String district_json = JsonParser.getJson(MainActivity.this, "district.json");
                List<Map<String, Object>> district_maps = getlistForJson(district_json);
                //返回显示的区县
                List<RegionBean> zoneBeans=new ArrayList<>();
                for (int i = 0; i < district_maps.size(); i++) {
                    RegionBean zoneBean=new RegionBean(""+district_maps.get(i).get("code"),""+district_maps.get(i).get("name"));
                    //当前城市下的区县
                    if (cityId.equals(district_maps.get(i).get("cityCode"))){
                        zoneBeans.add(zoneBean);
                    }
                }
                return zoneBeans;
            }
            //四级联动时,必须有返回值。三级联动时,可忽略。
            @Override
            public List<RegionBean> setOnZoneSelected(RegionBean regionBean) {
                //接收选中的区县
                mZone = regionBean.getName();
                //获取当前区县的id
                String districtId = regionBean.getId();

                //json数据 街道
                String street_json = JsonParser.getJson(MainActivity.this, "street.json");
                List<Map<String, Object>> street_maps = getlistForJson(street_json);
                //返回显示的街道
                List<RegionBean> zoneList=new ArrayList<>();
                for (int i = 0; i < street_maps.size(); i++) {
                    RegionBean streetBean=new RegionBean(""+street_maps.get(i).get("code"),""+street_maps.get(i).get("name"));
                    //当前区县下的街道
                    if (districtId.equals(street_maps.get(i).get("areaCode"))){
                        zoneList.add(streetBean);
                    }
                }
                //返回显示的街道
                //(如果是三级联动,则不需要返回)
                return zoneList;
            }
            @Override
            public void setOnAreaSelected(RegionBean regionBean) {
                //如果是四级联动,则得到选中的街道,如果是三级联动,则没有返回
                mArea = regionBean.getName();
                //设置值
                tv_region.setText(mProvince+" "+mCity+" "+mZone+" "+mArea);
            }
        });
    }
    
    /**
     * json转换map
     * @param jsonStr
     * @return
     */
    public static Map<String, Object> getMapForJson(String jsonStr){
        JSONObject jsonObject ;
        try {
            jsonObject = new JSONObject(jsonStr);

            Iterator<String> keyIter= jsonObject.keys();
            String key;
            Object value ;
            Map<String, Object> valueMap = new HashMap<String, Object>();
            while (keyIter.hasNext()) {
                key = keyIter.next();
                value = jsonObject.get(key);
                valueMap.put(key, value);
            }
            return valueMap;
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
            Log.e("dsasaddsa",e.toString());
        }
        return null;
    }

    /**
     * json转换list<map>
     * @param jsonStr
     * @return
     */
    public static List<Map<String, Object>> getlistForJson(String jsonStr){
        List<Map<String, Object>> list = null;
        try {
            JSONArray jsonArray = new JSONArray(jsonStr);
            JSONObject jsonObj ;
            list = new ArrayList<Map<String,Object>>();
            for(int i = 0 ; i < jsonArray.length() ; i ++){
                jsonObj = (JSONObject)jsonArray.get(i);
                list.add(getMapForJson(jsonObj.toString()));
            }
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }
        return list;
    }
}

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值