3步实现城市选择器:Android-PickerView三级联动开发指南
【免费下载链接】Android-PickerView 项目地址: https://gitcode.com/gh_mirrors/and/Android-PickerView
你是否还在为APP中的地址选择功能繁琐而烦恼?用户填写地址时总是出错?本文将通过Android-PickerView库,3步实现一个流畅的城市三级联动选择器,让用户地址选择体验提升10倍。读完本文,你将掌握数据解析、联动逻辑和UI定制的完整实现方案。
一、准备工作:了解核心组件
Android-PickerView是一个轻量级的选择器库,支持时间、选项等多种选择模式。在城市选择场景中,我们主要使用其OptionsPickerView(选项选择器) 组件,通过三级联动实现省-市-区的选择功能。
核心文件结构:
- 主Activity:JsonDataActivity.java
- 数据模型:JsonBean.java
- 数据源:province.json
- 布局文件:activity_json_data.xml
二、实现步骤:从数据到界面
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
总结
通过以上三个步骤,我们实现了一个功能完善的城市三级联动选择器。核心在于:
- 准备合适的数据源和对应的数据模型
- 正确解析并构建三级联动数据结构
- 使用OptionsPickerView组件实现界面交互
这个方案不仅适用于城市选择,还可以扩展到其他需要三级联动的场景,如商品分类、日期选择等。更多高级用法可以参考项目中的MainActivity.java。
收藏本文,下次开发地址选择功能时直接复用!如有疑问,欢迎在评论区留言讨论。
【免费下载链接】Android-PickerView 项目地址: https://gitcode.com/gh_mirrors/and/Android-PickerView
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



