3步实现城市选择器:Android-PickerView三级联动开发指南

3步实现城市选择器:Android-PickerView三级联动开发指南

【免费下载链接】Android-PickerView 【免费下载链接】Android-PickerView 项目地址: https://gitcode.com/gh_mirrors/and/Android-PickerView

你是否还在为APP中的地址选择功能繁琐而烦恼?用户填写地址时总是出错?本文将通过Android-PickerView库,3步实现一个流畅的城市三级联动选择器,让用户地址选择体验提升10倍。读完本文,你将掌握数据解析、联动逻辑和UI定制的完整实现方案。

一、准备工作:了解核心组件

Android-PickerView是一个轻量级的选择器库,支持时间、选项等多种选择模式。在城市选择场景中,我们主要使用其OptionsPickerView(选项选择器) 组件,通过三级联动实现省-市-区的选择功能。

核心文件结构:

二、实现步骤:从数据到界面

1. 数据准备与解析

城市选择器的核心是数据源。项目中提供了全国省市区数据的JSON文件province.json,格式如下:

[
  {
    "name": "北京市",
    "city": [
      {
        "name": "北京市",
        "area": ["东城区", "西城区", "崇文区", ...]
      }
    ]
  },
  ...
]

我们需要创建对应的数据模型JsonBean.java,实现IPickerViewData接口:

public class JsonBean implements IPickerViewData {
    private String name;
    private List<CityBean> city;
    
    @Override
    public String getPickerViewText() {
        return this.name; // 用于选择器显示的文本
    }
    
    public static class CityBean {
        private String name;
        private List<String> area;
        // getter和setter方法
    }
    // getter和setter方法
}

2. 数据加载与处理

JsonDataActivity.java中,我们需要在子线程中解析JSON数据,避免阻塞UI:

private void initJsonData() {
    String JsonData = new GetJsonDataUtil().getJson(this, "province.json");
    ArrayList<JsonBean> jsonBean = parseData(JsonData);
    
    // 省级数据
    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<>();
            city_AreaList.addAll(jsonBean.get(i).getCityList().get(c).getArea());
            province_AreaList.add(city_AreaList);
        }
        
        options2Items.add(cityList); // 市级数据
        options3Items.add(province_AreaList); // 区级数据
    }
}

3. 初始化并显示选择器

使用OptionsPickerBuilder构建选择器,并设置三级数据:

private void showPickerView() {
    OptionsPickerView pvOptions = new OptionsPickerBuilder(this, new OnOptionsSelectListener() {
        @Override
        public void onOptionsSelect(int options1, int options2, int options3, View v) {
            // 返回的分别是三个级别的选中位置
            String province = options1Items.get(options1).getPickerViewText();
            String city = options2Items.get(options1).get(options2);
            String area = options3Items.get(options1).get(options2).get(options3);
            
            String address = province + city + area;
            Toast.makeText(JsonDataActivity.this, address, Toast.LENGTH_SHORT).show();
        }
    })
    .setTitleText("城市选择")
    .setDividerColor(Color.BLACK)
    .setTextColorCenter(Color.BLACK)
    .setContentTextSize(20)
    .build();
    
    pvOptions.setPicker(options1Items, options2Items, options3Items); // 设置三级数据
    pvOptions.show(); // 显示选择器
}

三、优化与扩展

性能优化

  • 数据解析放在子线程,避免ANR:JsonDataActivity.java中使用Handler机制实现
  • 避免重复解析:使用isLoaded变量标记数据是否已解析完成

UI定制

通过OptionsPickerBuilder可以自定义选择器的样式:

  • 设置标题:setTitleText("城市选择")
  • 修改分割线颜色:setDividerColor(Color.BLACK)
  • 调整文字大小:setContentTextSize(20)
  • 更多样式可以参考OptionsPickerBuilder.java

总结

通过以上三个步骤,我们实现了一个功能完善的城市三级联动选择器。核心在于:

  1. 准备合适的数据源和对应的数据模型
  2. 正确解析并构建三级联动数据结构
  3. 使用OptionsPickerView组件实现界面交互

这个方案不仅适用于城市选择,还可以扩展到其他需要三级联动的场景,如商品分类、日期选择等。更多高级用法可以参考项目中的MainActivity.java

收藏本文,下次开发地址选择功能时直接复用!如有疑问,欢迎在评论区留言讨论。

【免费下载链接】Android-PickerView 【免费下载链接】Android-PickerView 项目地址: https://gitcode.com/gh_mirrors/and/Android-PickerView

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值