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

发布时间 - 2026-01-10 22:18:45    点击率:

 最近有需求需要实现省市区三级联动,但是发现之前的实现不够灵活,自己做了一些优化。为了方便以后使用,抽离出来放在了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实现城市选择三级联动  # 放在  # 北京市  # 弹出  # 小编  # 襄阳  # 就可以  # 孝感  # 张家口  # 自己的  # 的是  # 荆州  # 邯郸  # 保定  # 秦皇岛  # 都有  # 还可以  # 在此  # 也在  # 我对  # 石家庄 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: HTML5空格和margin有啥区别_空格与外边距的使用场景【说明】  Laravel中的withCount方法怎么高效统计关联模型数量  Laravel的契約(Contracts)是什么_深入理解Laravel Contracts与依赖倒置  高防服务器如何保障网站安全无虞?  深圳网站制作平台,深圳市做网站好的公司有哪些?  EditPlus中的正则表达式 实战(1)  googleplay官方入口在哪里_Google Play官方商店快速入口指南  Laravel如何使用Scope本地作用域_Laravel模型常用查询逻辑封装技巧【手册】  Linux系统命令中tree命令详解  如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?  如何快速搭建高效服务器建站系统?  公司门户网站制作公司有哪些,怎样使用wordpress制作一个企业网站?  免费网站制作appp,免费制作app哪个平台好?  如何获取PHP WAP自助建站系统源码?  php静态变量怎么调试_php静态变量作用域调试技巧【解答】  大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?  如何在IIS中配置站点IP、端口及主机头?  矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?  Laravel怎么解决跨域问题_Laravel配置CORS跨域访问  JavaScript如何实现音频处理_Web Audio API如何工作?  JS碰撞运动实现方法详解  Laravel怎么实现微信登录_Laravel Socialite第三方登录集成  如何快速搭建支持数据库操作的智能建站平台?  Laravel如何记录日志_Laravel Logging系统配置与自定义日志通道  Laravel怎么实现支付功能_Laravel集成支付宝微信支付  Python自然语言搜索引擎项目教程_倒排索引查询优化案例  如何快速搭建高效可靠的建站解决方案?  微信小程序 canvas开发实例及注意事项  Linux系统运维自动化项目教程_Ansible批量管理实战  Laravel模型事件有哪些_Laravel Model Event生命周期详解  php结合redis实现高并发下的抢购、秒杀功能的实例  免费的流程图制作网站有哪些,2025年教师初级职称申报网上流程?  大同网页,大同瑞慈医院官网?  如何使用 Go 正则表达式精准提取括号内首个纯字母标识符(忽略数字与嵌套)  网站制作软件有哪些,制图软件有哪些?  Laravel数据库迁移怎么用_Laravel Migration管理数据库结构的正确姿势  如何用已有域名快速搭建网站?  如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?  手机怎么制作网站教程步骤,手机怎么做自己的网页链接?  Laravel怎么配置自定义表前缀_Laravel数据库迁移与Eloquent表名映射【步骤】  做企业网站制作流程,企业网站制作基本流程有哪些?  Laravel模型关联查询教程_Laravel Eloquent一对多关联写法  详解ASP.NET 生成二维码实例(采用ThoughtWorks.QRCode和QrCode.Net两种方式)  CSS3怎么给轮播图加过渡动画_transition加transform实现【技巧】  如何在万网自助建站中设置域名及备案?  进行网站优化必须要坚持的四大原则  Laravel请求验证怎么写_Laravel Validator自定义表单验证规则教程  Laravel Asset编译怎么配置_Laravel Vite前端构建工具使用  WordPress 子目录安装中正确处理脚本路径的完整指南  今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】