IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android 省市区街道 四级联动 -> 正文阅读

[移动开发]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;
    }
}

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-04-04 12:22:54  更:2022-04-04 12:24:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 20:57:08-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码