最近有需求需要实现省市区三级联动,但是发现之前的实现不够灵活,自己做了一些优化。为了方便以后使用,抽离出来放在了github上WheelView。同时把其核心库放在了JCenter中了,可以直接引用。也可以参考项目中的Demo进行引用

下面介绍一下如何使用
如果用的是AndroidStudio那么直接在build.gradle文件中添加依赖:
dependencies {
compile 'chuck.WheelItemView:library:1.0.1'
}
成功引入库之后,可以在需要弹出省市区选择框的页面生成一AddressPickerView 实例。
pickerView = new AddressPickerView(this);
下面来说说需要的数据源,我对数据做了抽象,在使用的时候,将自己的数据model实现IWheelViewModel接口就可以了,如下:
public class AddressModel implements IWheelViewModel {
public String addressName;
public String addressId;
@Override
public String getValueString() {
return addressName;
}
@Override
public String getValueId() {
return addressId;
}
}
而后,就是讲你自己从服务器或者本地数据库得到到的数据按照一定的格式组件成三级数据List,这里可能会有一点复杂,需要在组装的过程中小心一定,省市区要对应不然数据会错乱。组装数据源,最后得到省市区对应的List:
private List<IWheelViewModel> mOneItems = new ArrayList<>(); private List<List<IWheelViewModel>> mTwoItems; private List<List<List<IWheelViewModel>>> mThreeItems;
将数据源填充到View中:
//设置三级数据 pickerView.setPickerData(mOneItems, mTwoItems, mThreeItems, true);
给确定和关闭按钮设置监听:
pickerView.setOnPickerSelectListener(new OnPickerSelectListener() {
@Override
public void onSelect(int pos1, int pos2, int pos3) {
String resultOne, resultTwo, resultThree;
resultOne = mOneItems.get(pos1).getValueString();
resultTwo = mTwoItems.get(pos1).get(pos2).getValueString();
resultThree = mThreeItems.get(pos1).get(pos2).get(pos3).getValueString();
Toast.makeText(MainActivity.this, resultOne + resultTwo + resultThree, Toast.LENGTH_SHORT).show();
}
});
pickerView.setOnDismissListener(new OnDismissListener() {
@Override
public void onDismiss(Object o) {
}
});
如果不做特殊的设置,选中字体和非中字体都有默认的颜色和大小,如果想改变这些属性,我也在AddressPickerView中提供了对应的方法:
/** * 被选中Item的字体大小 * * @param size */ public void setSelectTextSize(int size) /** * 被选中Item字体颜色 * * @param color */ public void setSelectTextColor(int color) /** * 被选中Item的字体大小 * * @param size dimen中定义的Size大小 */ public void setUnselectTextSize(int size) /** * 被选中Item字体颜色 * * @param colorId */ public void setUnselectTextColor(int colorId)
设置完这些属性之后,直接调用show()方法就可以弹出这个选择框了。
完整的代码:
public class MainActivity extends AppCompatActivity {
AddressPickerView pickerView;
private List<IWheelViewModel> mOneItems = new ArrayList<>();
private List<List<IWheelViewModel>> mTwoItems;
private List<List<List<IWheelViewModel>>> mThreeItems;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initData();
//创建实例
pickerView = new AddressPickerView(this);
//设置title
pickerView.setTitle("收货地址");
//设置被选中文字的颜色
pickerView.setSelectTextColor(R.color.green);
pickerView.setSelectTextSize(R.dimen.select_text_size);
pickerView.setUnselectTextColor(R.color.address_view_confirm_text_color);
pickerView.setUnselectTextSize(R.dimen.unselect_text_size);
//设置三级数据
pickerView.setPickerData(mOneItems, mTwoItems, mThreeItems, true);
//设置确定和关闭监听
pickerView.setOnPickerSelectListener(new OnPickerSelectListener() {
@Override
public void onSelect(int pos1, int pos2, int pos3) {
String resultOne, resultTwo, resultThree;
resultOne = mOneItems.get(pos1).getValueString();
resultTwo = mTwoItems.get(pos1).get(pos2).getValueString();
resultThree = mThreeItems.get(pos1).get(pos2).get(pos3).getValueString();
Toast.makeText(MainActivity.this, resultOne + resultTwo + resultThree, Toast.LENGTH_SHORT).show();
}
});
pickerView.setOnDismissListener(new OnDismissListener() {
@Override
public void onDismiss(Object o) {
}
});
}
private void initData() {
AddressModel model = new AddressModel();
model.addressName = "北京";
mOneItems.add(model);
AddressModel model1 = new AddressModel();
model1.addressName = "湖北";
mOneItems.add(model1);
AddressModel model2 = new AddressModel();
model2.addressName = "河北";
mOneItems.add(model2);
mTwoItems = new ArrayList<>();
List<IWheelViewModel> l21 = new ArrayList<>();
AddressModel model21 = new AddressModel();
model21.addressName = "北京市";
l21.add(model21);
List<IWheelViewModel> l22 = new ArrayList<>();
AddressModel model221 = new AddressModel();
model221.addressName = "武汉";
AddressModel model222 = new AddressModel();
model222.addressName = "襄阳";
AddressModel model223 = new AddressModel();
model223.addressName = "十堰";
AddressModel model224 = new AddressModel();
model224.addressName = "孝感";
AddressModel model225 = new AddressModel();
model225.addressName = "荆州";
l22.add(model221);
l22.add(model222);
l22.add(model223);
l22.add(model224);
l22.add(model225);
List<IWheelViewModel> l23 = new ArrayList<>();
AddressModel model231 = new AddressModel();
model231.addressName = "石家庄";
AddressModel model232 = new AddressModel();
model232.addressName = "邯郸";
AddressModel model233 = new AddressModel();
model233.addressName = "秦皇岛";
AddressModel model234 = new AddressModel();
model234.addressName = "保定";
AddressModel model235 = new AddressModel();
model235.addressName = "张家口";
l23.add(model231);
l23.add(model232);
l23.add(model233);
l23.add(model234);
l23.add(model235);
mTwoItems.add(l21);
mTwoItems.add(l22);
mTwoItems.add(l23);
mThreeItems = new ArrayList<>();
List<IWheelViewModel> l31 = new ArrayList<>();
for (int i = 0; i < 10; i++) {
AddressModel model3 = new AddressModel();
model3.addressName = "北京市" + i;
l31.add(model3);
}
List<List<IWheelViewModel>> list21 = new ArrayList<>();
list21.add(l31);
mThreeItems.add(list21);
for (int k = 0; k < 2; k++) {
List<List<IWheelViewModel>> temp = new ArrayList<>();
for (int j = 0; j < 5; j++) {
List<IWheelViewModel> temp1 = new ArrayList<>();
for (int i = 0; i < 10; i++) {
AddressModel model111 = new AddressModel();
model111.addressName = "地区" + i;
temp1.add(model111);
}
temp.add(temp1);
}
mThreeItems.add(temp);
}
}
public void onClick(View view) {
pickerView.show();
}
}
这些代码可以参考demo,实际上,这里只是实现了省市区的三级联动,还可以自己参考AddressPickerView定制自己想要的滚动选择框。这里只讨论省市区这种场景,其他的场景可以自己实现。
如果觉得有用,欢迎star,如果觉得有问题,欢迎给出建议。
https://github.com/hgchenkai/WheelView
以上所述是小编给大家介绍的Android省市区三级联动控件使用方法实例讲解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
# android
# 省市区三级联动
# Android PickerView实现三级联动效果
# Android实现省市区三级联动
# 最好用的Android省市区三级联动选择效果
# Android日期选择器实现年月日三级联动
# Android中使用开源框架Citypickerview实现省市区三级联动选择
# Android自定义WheelView地区选择三级联动
# android-wheel控件实现三级联动效果
# Android使用android-wheel实现省市县三级联动
# Android实现联动下拉框 下拉列表spinner的实例代码
# Android实现城市选择三级联动
# 放在
# 北京市
# 弹出
# 小编
# 襄阳
# 就可以
# 孝感
# 张家口
# 自己的
# 的是
# 荆州
# 邯郸
# 保定
# 秦皇岛
# 都有
# 还可以
# 在此
# 也在
# 我对
# 石家庄
相关文章:
建站之星安装后如何配置SEO及设计样式?
香港服务器选型指南:免备案配置与高效建站方案解析
制作网页的网站有哪些,电脑上怎么做网页?
如何通过宝塔面板实现本地网站访问?
建站主机功能解析:服务器选择与快速搭建指南
独立制作一个网站多少钱,建立网站需要花多少钱?
建站之星展会模板:智能建站与自助搭建高效解决方案
如何获取PHP WAP自助建站系统源码?
专业商城网站制作公司有哪些,pi商城官网是哪个?
c++怎么实现高并发下的无锁队列_c++ std::atomic原子变量与CAS操作【详解】
如何用低价快速搭建高质量网站?
如何快速生成凡客建站的专业级图册?
制作假网页,招聘网的薪资待遇,会有靠谱的吗?一面试又各种折扣?
微网站制作教程,不会写代码,不会编程,怎么样建自己的网站?
淘宝制作网站有哪些,淘宝网官网主页?
制作网站的公司有哪些,做一个公司网站要多少钱?
网页制作模板网站推荐,网页设计海报之类的素材哪里好?
香港服务器WordPress建站指南:SEO优化与高效部署策略
如何获取开源自助建站系统免费下载链接?
国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?
巅云智能建站系统:可视化拖拽+多端适配+免费模板一键生成
模具网站制作流程,如何找模具客户?
网站制作网站,深圳做网站哪家比较好?
长春网站建设制作公司,长春的网络公司怎么样主要是能做网站的?
如何通过IIS搭建网站并配置访问权限?
Python lxml的etree和ElementTree有什么区别
高防服务器租用指南:配置选择与快速部署攻略
如何快速辨别茅台真假?关键步骤解析
如何正确选择百度移动适配建站域名?
5种Android数据存储方式汇总
建站之星安装后界面空白如何解决?
如何在香港免费服务器上快速搭建网站?
专业制作网站的公司哪家好,建立一个公司网站的费用.有哪些部分,分别要多少钱?
c++如何打印函数堆栈信息_c++ backtrace函数与符号名解析【方法】
小型网站制作HTML,*游戏网站怎么搭建?
网站制作公司排行榜,四大门户网站排名?
网站企业制作流程,用什么语言做企业网站比较好?
小说建站VPS选用指南:性能对比、配置优化与建站方案解析
存储型VPS适合搭建中小型网站吗?
如何确认建站备案号应放置的具体位置?
韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐
宝塔建站无法访问?如何排查配置与端口问题?
如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南
建站之星24小时客服电话如何获取?
网站制作中优化长尾关键字挖掘的技巧,建一个视频网站需要多少钱?
ui设计制作网站有哪些,手机UI设计网址吗?
如何快速完成中国万网建站详细流程?
如何零成本快速生成个人自助网站?
西安制作网站公司有哪些,西安货运司机用的最多的app或者网站是什么?
如何用免费手机建站系统零基础打造专业网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。