最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Android省市区三级联动控件使用方法实例讲解
时间:2017-01-05 编辑:简简单单 来源:一聚教程网
最近有需求需要实现省市区三级联动,但是发现之前的实现不够灵活,自己做了一些优化。为了方便以后使用,抽离出来放在了github上WheelView。同时把其核心库放在了JCenter中了,可以直接引用。也可以参考项目中的Demo进行引用
下面介绍一下如何使用
如果用的是AndroidStudio那么直接在build.gradle文件中添加依赖:
代码如下 | 复制代码 |
dependencies {
compile'chuck.WheelItemView:library:1.0.1'
}
|
成功引入库之后,可以在需要弹出省市区选择框的页面生成一AddressPickerView 实例。
代码如下 | 复制代码 |
pickerView =newAddressPickerView(this); |
下面来说说需要的数据源,我对数据做了抽象,在使用的时候,将自己的数据model实现IWheelViewModel接口就可以了,如下:
代码如下 | 复制代码 |
publicclassAddressModelimplementsIWheelViewModel {
publicString addressName;
publicString addressId;
@Override
publicString getValueString() {
returnaddressName;
}
@Override
publicString getValueId() {
returnaddressId;
}
}
|
而后,就是讲你自己从服务器或者本地数据库得到到的数据按照一定的格式组件成三级数据List,这里可能会有一点复杂,需要在组装的过程中小心一定,省市区要对应不然数据会错乱。组装数据源,最后得到省市区对应的List:
代码如下 | 复制代码 |
privateList
privateList
privateList
|
将数据源填充到View中:
代码如下 | 复制代码 |
pickerView.setPickerData(mOneItems, mTwoItems, mThreeItems,true); |
给确定和关闭按钮设置监听:
代码如下 | 复制代码 |
pickerView.setOnPickerSelectListener(newOnPickerSelectListener() {
@Override
publicvoidonSelect(intpos1,intpos2,intpos3) {
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(newOnDismissListener() {
@Override
publicvoidonDismiss(Object o) {
}
});
|
如果不做特殊的设置,选中字体和非中字体都有默认的颜色和大小,如果想改变这些属性,我也在AddressPickerView中提供了对应的方法:
设置完这些属性之后,直接调用show()方法就可以弹出这个选择框了。
完整的代码:
代码如下 | 复制代码 |
publicclassMainActivityextendsAppCompatActivity {
AddressPickerView pickerView;
privateList
privateList
privateList
@Override
protectedvoidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initData();
//创建实例
pickerView =newAddressPickerView(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(newOnPickerSelectListener() {
@Override
publicvoidonSelect(intpos1,intpos2,intpos3) {
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(newOnDismissListener() {
@Override
publicvoidonDismiss(Object o) {
}
});
}
privatevoidinitData() {
AddressModel model =newAddressModel();
model.addressName ="北京";
mOneItems.add(model);
AddressModel model1 =newAddressModel();
model1.addressName ="湖北";
mOneItems.add(model1);
AddressModel model2 =newAddressModel();
model2.addressName ="河北";
mOneItems.add(model2);
mTwoItems =newArrayList<>();
List
AddressModel model21 =newAddressModel();
model21.addressName ="北京市";
l21.add(model21);
List
AddressModel model221 =newAddressModel();
model221.addressName ="武汉";
AddressModel model222 =newAddressModel();
model222.addressName ="襄阳";
AddressModel model223 =newAddressModel();
model223.addressName ="十堰";
AddressModel model224 =newAddressModel();
model224.addressName ="孝感";
AddressModel model225 =newAddressModel();
model225.addressName ="荆州";
l22.add(model221);
l22.add(model222);
l22.add(model223);
l22.add(model224);
l22.add(model225);
List
AddressModel model231 =newAddressModel();
model231.addressName ="石家庄";
AddressModel model232 =newAddressModel();
model232.addressName ="邯郸";
AddressModel model233 =newAddressModel();
model233.addressName ="秦皇岛";
AddressModel model234 =newAddressModel();
model234.addressName ="保定";
AddressModel model235 =newAddressModel();
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 =newArrayList<>();
List
for(inti =0; i <10; i++) {
AddressModel model3 =newAddressModel();
model3.addressName ="北京市"+ i;
l31.add(model3);
}
List
list21.add(l31);
mThreeItems.add(list21);
for(intk =0; k <2; k++) {
List
for(intj =0; j <5; j++) {
List
for(inti =0; i <10; i++) {
AddressModel model111 =newAddressModel();
model111.addressName ="地区"+ i;
temp1.add(model111);
}
temp.add(temp1);
}
mThreeItems.add(temp);
}
}
publicvoidonClick(View view) {
pickerView.show();
}
}
|
这些代码可以参考demo,实际上,这里只是实现了省市区的三级联动,还可以自己参考AddressPickerView定制自己想要的滚动选择框。这里只讨论省市区这种场景,其他的场景可以自己实现。
如果觉得有用,欢迎star,如果觉得有问题,欢迎给出建议。
https://github.com/hgchenkai/WheelView
相关文章
- Android编程之交互对话框实例浅析 06-26
- android判断设备是否有相机的实例代码 06-14
- Android清空编辑框内容功能的实现实例代码 06-12
- android ViewPager实现滑动翻页效果实例代码 06-10
- Android 广播监听网络状态详解及实例代码 05-03
- Android ToolBar整合实例使用方法详解 04-11