当前位置: 首页 > 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

http://www.lqws.cn/news/443107.html

相关文章:

  • 计算机视觉阶段一:CV入门基础
  • Xsens动作捕捉技术用于研究机器人的运动控制、姿态调整以及人机交互
  • .NET 的配置系统
  • 【Mini-F5265-OB开发板试用测评】2、PWM驱动遥控车RX2接收解码带马达驱动控制IC
  • 华为OD机试_2025 B卷_构成正方形数量(Python,100分)(附详细解题思路)
  • 如何获取Java对象的大小
  • MQTT 消息队列传输协议(Message Queuing Telemetry Transport)
  • 【深度学习】生成对抗网络(GANs)深度解析:从理论到实践的革命性生成模型
  • 优化 Python 爬虫性能:异步爬取新浪财经大数据
  • 46道Jenkins高频题整理(附答案背诵版)
  • Jenkins通过Pipeline流水线方式编译Java项目
  • IP 地理库的使用指南:从基础应用到深度实践​
  • Redis 持久化机制详解:RDB、AOF 原理与面试最佳实践(AOF篇)
  • IntersectionObserver API应用场景示例代码详解
  • 医疗低功耗智能AI网络搜索优化策略
  • jquery 赋值时不触发change事件解决——仙盟创梦IDE
  • Kafka性能压测报告撰写
  • Outlook邮箱开通发信服务及OAuth2验证开通
  • 靶场(二十五)---小白心得靶场体会---Access
  • 基于Python+PySide6构建的夸克网盘批量工具,支持批量转存与分享
  • 使用NPOI库导出多个Excel并压缩zip包
  • Qt 解析复杂对象构成
  • 基于C#的Baumer相机二次开发教程
  • VACM 详解:SNMPv3 的访问控制核心
  • 基于大模型的急性结石性胆囊炎全流程预测与诊疗方案研究
  • 小白畅通Linux之旅-----Rsync+sersync实现数据实时同步
  • 九九乘法表
  • [Data Pipeline] Kafka消息 | Redis缓存 | Docker部署(Lambda架构)
  • 编辑器及脚本案例
  • 2025-05-05-80x86汇编语言环境配置