最近有需求需要实现省市区三级联动,但是发现之前的实现不够灵活,自己做了一些优化。为了方便以后使用,抽离出来放在了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实现城市选择三级联动
# 放在
# 北京市
# 弹出
# 小编
# 襄阳
# 就可以
# 孝感
# 张家口
# 自己的
# 的是
# 荆州
# 邯郸
# 保定
# 秦皇岛
# 都有
# 还可以
# 在此
# 也在
# 我对
# 石家庄
相关文章:
外汇网站制作流程,如何在工商银行网站上做外汇买卖?
如何快速完成中国万网建站详细流程?
名字制作网站免费,所有小说网站的名字?
建站IDE高效指南:快速搭建+SEO优化+自适应模板全解析
建站之星如何取消后台验证码生成?
香港服务器WordPress建站指南:SEO优化与高效部署策略
如何通过西部数码建站助手快速创建专业网站?
如何批量查询域名的建站时间记录?
如何用美橙互联一键搭建多站合一网站?
合肥做个网站多少钱,合肥本地有没有比较靠谱的交友平台?
c# 在ASP.NET Core中管理和取消后台任务
如何在云主机快速搭建网站站点?
如何通过PHP快速构建高效问答网站功能?
广州美橙建站如何快速搭建多端合一网站?
韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南
如何通过cPanel快速搭建网站?
建站之星如何快速更换网站模板?
建站之星如何保障用户数据免受黑客入侵?
如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?
建站之星代理如何优化在线客服效率?
建站之星代理商如何保障技术支持与售后服务?
建站之星代理费用多少?最新价格详情介绍
如何在新浪SAE免费搭建个人博客?
非常酷的网站设计制作软件,酷培ai教育官方网站?
css网站制作参考文献有哪些,易聊怎么注册?
如何通过免费商城建站系统源码自定义网站主题与功能?
外贸公司网站制作,外贸网站建设一般有哪些步骤?
如何用低价快速搭建高质量网站?
如何在阿里云服务器自主搭建网站?
html制作网站的步骤有哪些,iapp如何添加网页?
网站好制作吗知乎,网站开发好学吗?有什么技巧?
青岛网站建设如何选择本地服务器?
网站海报制作教学视频教程,有什么免费的高清可商用图片网站,用于海报设计?
公司网站制作需要多少钱,找人做公司网站需要多少钱?
如何在阿里云域名上完成建站全流程?
免费制作小说封面的网站有哪些,怎么接网站批量的封面单?
如何通过智能用户系统一键生成高效建站方案?
宝华建站服务条款解析:五站合一功能与SEO优化设置指南
建站之星价格显示格式升级,你的预算足够吗?
建站主机是否属于云主机类型?
安徽网站建设与外贸建站服务专业定制方案
简易网站制作视频教程,使用记事本编写一个简单的网页html文件?
建站主机数据库如何配置才能提升网站性能?
h5网站制作工具有哪些,h5页面制作工具有哪些?
教学论文网站制作软件有哪些,写论文用什么软件
?
高防服务器租用指南:配置选择与快速部署攻略
建站之星免费版是否永久可用?
网站制作软件有哪些,制图软件有哪些?
深圳防火门网站制作公司,深圳中天明防火门怎么编码?
如何在IIS中配置站点IP、端口及主机头?
*请认真填写需求信息,我们会在24小时内与您取得联系。