前言
项目新增新功能地区筛选 要实现省市区三级联动
一直以为很简单结果在使用第三方组件的时候出现了问题
Github上stars数最多的那个Android-PickerView一直出现问题
不是报空指针就是数组越界一个小问题卡了一下午 加技术群都满了 问题区也没有找到满意的答案
一度怀疑这个Android-PickerView这个星星是不是刷上去的最后无奈还是换了别的第三方
在Github上找到了这个citypicker亲测很好用 流程也非常简单 !
CityPicker 城市选择器
功能点
- 支持仿iOS滚轮实现、仿京东样式、一级城市列表、三级城市列表
- 支持多种自定义属性来满足你的需求
- 简单的几行代码即可实现城市选择器功能
- 支持使用自己的数据来实现城市选择器
第一步gradle引用
implementation 'liji.library.dev:citypickerview:5.2.2'
CityPicker代码实现
CityPicker基本属性配置
CityConfig cityConfig = new CityConfig.Builder()
.title("选择城市")//标题
.titleTextSize(18)//标题文字大小
.titleTextColor("#585858")//标题文字颜 色
.titleBackgroundColor("#E9E9E9")//标题栏背景色
.confirTextColor("#585858")//确认按钮文字颜色
.confirmText("ok")//确认按钮文字
.confirmTextSize(16)//确认按钮文字大小
.cancelTextColor("#585858")//取消按钮文字颜色
.cancelText("cancel")//取消按钮文字
.cancelTextSize(16)//取消按钮文字大小
//显示类,只显示省份一级,显示省市两级还是显示省市区三级
.setCityWheelType(CityConfig.WheelType.PRO_CITY_DIS)
.showBackground(true)//是否显示半透明背景
.visibleItemsCount(7)//显示item的数量
.province("浙江省")//默认显示的省份
.city("杭州市")//默认显示省份下面的城市
.district("滨江区")//默认显示省市下面的区县数据
.provinceCyclic(true)//省份滚轮是否可以循环滚动
.cityCyclic(true)//城市滚轮是否可以循环滚动
.districtCyclic(true)//区县滚轮是否循环滚动
.setCustomItemLayout(R.layout.item_city)//自定义item的布局
//自定义item布局里面的textViewid
.setCustomItemTextViewId(R.id.item_city_name_tv)
.drawShadows(false)//滚轮不显示模糊效果
.setLineColor("#03a9f4")//中间横线的颜色
.setLineHeigh(5)//中间横线的高度
.setShowGAT(true)//是否显示港澳台数据,默认不显示
.build();
//设置自定义的属性配置
CityPickerView.getInstance().setConfig(cityConfig);
仿IOS省市区三级联动
//申明对象 注意这个对象和仿京东不是同一个对象
CityPickerView mPicker=new CityPickerView();
@Override
public void onCreate() {
super.onCreate();
//预先加载仿iOS滚轮实现的全部数据
mPicker.init(this);
}
//添加默认的配置,不需要自己定义,当然也可以自定义相关熟悉,详细属性请看demo
CityConfig cityConfig = new CityConfig.Builder().build();
mPicker.setConfig(cityConfig);
//监听选择点击事件及返回结果
mPicker.setOnCityItemClickListener(new OnCityItemClickListener() {
@Override
public void onSelected(ProvinceBean province,
CityBean city, DistrictBean district) {
//省份province
//城市city
//地区district
}
@Override
public void onCancel() {
ToastUtils.showLongToast(this, "已取消");
}
});
//显示
mPicker.showCityPicker( );
仿IOS省市区三级联动效果
仿京东省市区三级联动
//创建对象
JDCityPicker cityPicker = new JDCityPicker();
//初始化配置
JDCityConfig jdCityConfig = new JDCityConfig.Builder().build();
//设置显示的样式
jdCityConfig.setShowType(JDCityConfig.ShowType.PRO_CITY_DIS);
cityPicker.init(this);//初始化选择器
cityPicker.setConfig(jdCityConfig);
cityPicker.setOnCityItemClickListener(new OnCityItemClickListener() {
@Override
public void onSelected(ProvinceBean province,
CityBean city, DistrictBean district) {//选中后的监听
resultV.setText("城市选择结果:\n" +
province.getName() + "(" + province.getId() + ")\n"
+ city.getName() + "(" + city.getId() + ")\n"
+ district.getName() + "(" + district.getId() + ")");
}
@Override
public void onCancel() {
//cancel监听
}
});
//显示地区列表
cityPicker.showCityPicker();
仿京东省市区三级联动效果
cityPicker 代码混淆
如果混淆开启了还是报错 请把混淆关闭了再打开试试 开始用的时候我遇到了这个问题
后面加群解决了 群号是:417846442
-keep class com.lljjcoder.**{
*;
}
-dontwarn demo.**
-keep class demo.**{*;}
-dontwarn net.sourceforge.pinyin4j.**
-keep class net.sourceforge.pinyin4j.**{*;}
-keep class net.sourceforge.pinyin4j.format.**{*;}
-keep class net.sourceforge.pinyin4j.format.exception.**{*;}
总结
多加技术群还是有好处 遇到不懂的问题 在群里发表一下 还是有好人帮忙的
虽然绝大部分都不会伸手帮忙 :(
如果别人帮你解决了问题 记得请别人喝一瓶水 了表敬意!
共勉
我要一步一步往上爬
在最高点乘着叶片往前飞
任风吹干流过的泪和汗
我要一步一步往上爬
等待阳光静静看着它的脸
小小的天有大大的梦想
我有属于我的天
任风吹干流过的泪和汗
总有一天我有属于我的天