当前位置: 首页 > news >正文

android 省市区联动选择

小工具省市区联动

1、根据本地内置json资源包设置选择

省份资源包下载

2、在activity中的重要代码,解析json状态

     private Thread thread;private static final int MSG_LOAD_DATA = 0x0001;private static final int MSG_LOAD_SUCCESS = 0x0002;private static final int MSG_LOAD_FAILED = 0x0003;Handler handler = new Handler(Looper.getMainLooper());@SuppressLint("HandlerLeak")private Handler mHandler = new Handler() {public void handleMessage(Message msg) {switch (msg.what) {case MSG_LOAD_DATA:if (thread == null) {thread = new Thread(new Runnable() {@Overridepublic void run() {initJsonData();}});thread.start();}break;case MSG_LOAD_SUCCESS:showSelectDialog();isLoaded = true;break;case MSG_LOAD_FAILED:ToastUtils.showCustomToast(RegistrationActivity.this, "Parse Failed");break;}}};

3、解析json代码

 private void initJsonData() {//解析数据/*** 注意:assets 目录下的Json文件仅供参考,实际使用可自行替换文件* 关键逻辑在于循环体** */String JsonData = new GetJsonDataUtil().getJson(this, "province.json");//获取assets目录下的json文件数据ArrayList<JsonBean> jsonBean = parseData(JsonData);//用Gson 转成实体/*** 添加省份数据** 注意:如果是添加的JavaBean实体,则实体类需要实现 IPickerViewData 接口,* PickerView会通过getPickerViewText方法获取字符串显示出来。*/options1Items = jsonBean;for (int i = 0; i < jsonBean.size(); i++) {//遍历省份ArrayList<String> cityList = new ArrayList<>();//该省的城市列表(第二级)ArrayList<ArrayList<String>> province_AreaList = new ArrayList<>();//该省的所有地区列表(第三极)for (int c = 0; c < jsonBean.get(i).getCityList().size(); c++) {//遍历该省份的所有城市String cityName = jsonBean.get(i).getCityList().get(c).getName();cityList.add(cityName);//添加城市ArrayList<String> city_AreaList = new ArrayList<>();//该城市的所有地区列表//如果无地区数据,建议添加空字符串,防止数据为null 导致三个选项长度不匹配造成崩溃/*if (jsonBean.get(i).getCityList().get(c).getArea() == null|| jsonBean.get(i).getCityList().get(c).getArea().size() == 0) {city_AreaList.add("");} else {city_AreaList.addAll(jsonBean.get(i).getCityList().get(c).getArea());}*/city_AreaList.addAll(jsonBean.get(i).getCityList().get(c).getArea());province_AreaList.add(city_AreaList);//添加该省所有地区数据}/*** 添加城市数据*/options2Items.add(cityList);/*** 添加地区数据*/options3Items.add(province_AreaList);}mHandler.sendEmptyMessage(MSG_LOAD_SUCCESS);}

4、解析初始化完成后,触发按钮可以实现选择

 private void showSelectDialog() {OptionsPickerView pvOptions = new OptionsPickerBuilder(RegistrationActivity.this, new OnOptionsSelectListener() {@Overridepublic void onOptionsSelect(int options1, int options2, int options3, View v) {//返回的分别是三个级别的选中位置String opt1tx = options1Items.size() > 0 ?options1Items.get(options1).getPickerViewText() : "";String opt2tx = options2Items.size() > 0&& options2Items.get(options1).size() > 0 ?options2Items.get(options1).get(options2) : "";String opt3tx = options2Items.size() > 0&& options3Items.get(options1).size() > 0&& options3Items.get(options1).get(options2).size() > 0 ?options3Items.get(options1).get(options2).get(options3) : "";String tx = opt1tx + opt2tx + opt3tx;edMerchantArea.setText(tx);
//                ToastUtils.showCustomToast(RegistrationActivity.this, tx);}}).setTitleText("城市选择").setDividerColor(Color.BLACK).setTextColorCenter(Color.BLACK) //设置选中项文字颜色.setContentTextSize(20).build();/*pvOptions.setPicker(options1Items);//一级选择器pvOptions.setPicker(options1Items, options2Items);//二级选择器*/pvOptions.setPicker(options1Items, options2Items, options3Items);//三级选择器pvOptions.show();}

                                                                                          -END

相关文章:

  • Kafka性能调优全攻略:从JVM参数到系统优化
  • Angular--Hello(TODO)
  • 基于C#的Baumer相机二次开发教程
  • 主流防火墙策略绕过漏洞的修复方案与加固实践
  • 宽度优先遍历(bfs)(2)——fllodfill算法
  • QLoRA (Quantized Low-Rank Adaptation)浅析
  • 火山引擎项亮:机器学习与智能推荐平台多云部署解决方案正式发布
  • 0_1排序与搜索
  • 【unitrix】 3.2 位取反运算(not.rs)
  • 【音视频】PJSIP库——示例简介、C++类说明
  • 【 感知集群】大规模分布式基础设施的AI赋能蓝图
  • Spring AOP @Before (前置通知): 在目标方法执行前做什么?
  • ChatGPT上瘾,大脑萎缩47%!?
  • Windows本地部署wordpress
  • 矩阵置零C++
  • Mac电脑-Office 2024 长期支持版(Excel、Word、PPT)
  • 《Go语言圣经》map
  • F接口基础.go
  • 基于Spring Boot的计算机考研交流系统的设计与实现
  • 微信小程序canvas实现抽奖动画
  • 站酷设计网/11月将现新冠感染高峰
  • 巩义企业网站托管服务商/关键洞察力
  • 济南网站建设公司有哪些/给我免费的视频在线观看
  • h5做的网站/网站设计模板网站
  • 朵以服饰 网站建设/竞价恶意点击立案标准
  • 网站建设一意见/推广如何做网上引流