Android省市区三级联动控件使用方法实例讲解

 最近有需求需要实现省市区三级联动,但是发现之前的实现不够灵活,自己做了一些优化。为了方便以后使用,抽离出来放在了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省市区三级联动控件使用方法实例讲解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

时间: 2024-10-12 05:00:32

Android省市区三级联动控件使用方法实例讲解的相关文章

javascript省市区三级联动下拉框菜单实例演示_javascript技巧

本文实例讲述了javascript实现省市区三级联动下拉框菜单代码,像平时购物选择地址时一样,通过选择的省动态加载城市列表,通过选择的城市动态加载县区列表,从而可以实现省市县的三级联动,下面使用原生的JavaScript来实现这个功能,分享给大家供大家参考.具体如下: 运行效果截图如下: 具体代码如下: <!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"

Android实现水波纹控件的方法

有很多app使用过水波纹的这样的效果,看着很酷酷的样子,所以自己就撸码写了一个. 实现思路: 利用贝塞尔曲线绘制圆弧(也就是水波的波纹) 通过动画改变绘制的起始点使水波纹平移 首先,定义我们需要的自定义属性. <?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="waveStyleable"> <!-- 水波

Android中使用开源框架Citypickerview实现省市区三级联动选择

1.概述 记得之前做商城项目,需要在地址选择中实现省市区三级联动,方便用户快速的填写地址,当时使用的是一个叫做android-wheel 的开源控件,当时感觉非常好用,唯一麻烦的是需要自己整理并解析省市区的xml文件,思路很简单,但是代码量相对大了些.偶然期间发现了另外一个开源组件,也就是今天要介绍的citypickerview. github地址:crazyandcoder/citypicker 2. 实现效果 下面给大家演示下实现效果: 3.   实现方法 (1)添加依赖 dependenc

Android编程实现改变控件背景及形态的方法_Android

本文实例讲述了Android编程实现改变控件背景及形态的方法.分享给大家供大家参考,具体如下: 1. 改变背景 在res/drawable下创建一个xml文件: <?xml version="1.0" encoding="UTF-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> // 控件被按下时候的背景 <item

图片-Android要实现这种类似ViewPager左右切换功能应该用什么控件或者方法

问题描述 Android要实现这种类似ViewPager左右切换功能应该用什么控件或者方法 有什么开源项目或者方法实现这种功能么? 解决方案 JazzyViewPager github上有,他有多重效果,你可以改造一下 解决方案二: Android使用ViewPager实现左右切换(转)Android使用ViewPager实现左右切换02(转)android viewpager 实现左右无限循环---------------------- 解决方案三: tabhost可以试试 解决方案四: Ga

Android零基础入门第17节:Android开发第一个控件,TextView属性和方法大全

原文:Android零基础入门第17节:Android开发第一个控件,TextView属性和方法大全 前面简单学习了一些Android UI的一些基础知识,那么接下来我们一起来详细学习Android的UI界面基本组件.     一.认识TextView 我们知道前面学习的HelloWorld应用程序中就是使用的TextView来显示一个文本,接下来首先一起来学习TextView的使用方法. TextView的作用就是在界面上显示文本.TextView直接继承了 View,是EditText.Bu

实例讲解Android应用中自定义组合控件的方法_Android

自定义view大概可以分成: 继承view 组合view 自己画的view(用paint和canvas) 自定义viewgroup(widget) 最近又跟同学聊起来了,于是就准备自己实现一个imagebutton来练练手.(最简单的了)以及后面一个把imageview与textview结合使用的案例. ImageButton要实现ImageButton最容易想到的不就是把button和imageview合在一起么.嗯,人容易就想到这是一个组合自定义view.可是如何把一个image放到butt

Android ScrollView只能添加一个子控件问题解决方法_Android

本文实例讲述了Android ScrollView只能添加一个子控件问题解决方法.分享给大家供大家参考,具体如下: 有下面一段代码 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent

Android拆轮子系列之写验证码控件的方法_Android

前言 先看看效果 怎么样不错吧?别急下面我就一步一步的教你实现. 用到的知识点总结: 1.Canvas和pint的使用,我们用它画点,线,字 2.View的基本用法 其实做这个东西还是很简单的,总体思路步骤如下: 1.准备一个Canvas. 2.向Canvas里面画几条斜杠. 3.向canvas里面画100个小点. 4.随机生成4个数字,然后画在canvas里面. 其实就是这么简单,没什么深奥的. 开始写编码 1.首先我们要重写View 既然我们要画验证码,那么我们就需要准备画笔(paint)和