热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

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

最近有需求需要实现省市区三级联动,但是发现之前的实现不够灵活,自己做了一些优化。下面通过实例代码给大家介绍下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 mOneItems= new ArrayList<>();
 private List> mTwoItems;
 private List>> 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 mOneItems= new ArrayList<>();
 private List> mTwoItems;
 private List>> 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 l21 = new ArrayList<>();
  AddressModel model21 = new AddressModel();
  model21.addressName = "北京市";
  l21.add(model21);
  List 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 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 l31 = new ArrayList<>();
  for (int i = 0; i <10; i++) {
   AddressModel model3 = new AddressModel();
   model3.addressName = "北京市" + i;
   l31.add(model3);
  }
  List> list21 = new ArrayList<>();
  list21.add(l31);
  mThreeItems.add(list21);
  for (int k = 0; k <2; k++) {
   List> temp = new ArrayList<>();
   for (int j = 0; j <5; j++) {
    List 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省市区三级联动控件使用方法实例讲解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!


推荐阅读
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • QUIC协议:快速UDP互联网连接
    QUIC(Quick UDP Internet Connections)是谷歌开发的一种旨在提高网络性能和安全性的传输层协议。它基于UDP,并结合了TLS级别的安全性,提供了更高效、更可靠的互联网通信方式。 ... [详细]
  • 本文基于对相关论文和开源代码的研究,详细介绍了LOAM(激光雷达里程计与建图)的工作原理,并对其关键技术进行了分析。 ... [详细]
  • 资源推荐 | TensorFlow官方中文教程助力英语非母语者学习
    来源:机器之心。本文详细介绍了TensorFlow官方提供的中文版教程和指南,帮助开发者更好地理解和应用这一强大的开源机器学习平台。 ... [详细]
  • 本文介绍了如何在具备多个IP地址的FTP服务器环境中,通过动态地址端口复用和地址转换技术优化网络配置。重点讨论了2Mb/s DDN专线连接、Cisco 2611路由器及内部网络地址规划。 ... [详细]
  • 数据库内核开发入门 | 搭建研发环境的初步指南
    本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ... [详细]
  • 在Linux系统中配置并启动ActiveMQ
    本文详细介绍了如何在Linux环境中安装和配置ActiveMQ,包括端口开放及防火墙设置。通过本文,您可以掌握完整的ActiveMQ部署流程,确保其在网络环境中正常运行。 ... [详细]
  • 如何在WPS Office for Mac中调整Word文档的文字排列方向
    本文将详细介绍如何使用最新版WPS Office for Mac调整Word文档中的文字排列方向。通过这些步骤,用户可以轻松更改文本的水平或垂直排列方式,以满足不同的排版需求。 ... [详细]
  • 本文总结了在使用Ionic 5进行Android平台APK打包时遇到的问题,特别是针对QRScanner插件的改造。通过详细分析和提供具体的解决方法,帮助开发者顺利打包并优化应用性能。 ... [详细]
  • 网络攻防实战:从HTTP到HTTPS的演变
    本文通过一系列日记记录了从发现漏洞到逐步加强安全措施的过程,探讨了如何应对网络攻击并最终实现全面的安全防护。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • 360SRC安全应急响应:从漏洞提交到修复的全过程
    本文详细介绍了360SRC平台处理一起关键安全事件的过程,涵盖从漏洞提交、验证、排查到最终修复的各个环节。通过这一案例,展示了360在安全应急响应方面的专业能力和严谨态度。 ... [详细]
  • 解决MongoDB Compass远程连接问题
    本文记录了在使用阿里云服务器部署MongoDB后,通过MongoDB Compass进行远程连接时遇到的问题及解决方案。详细介绍了从防火墙配置到安全组设置的各个步骤,帮助读者顺利解决问题。 ... [详细]
  • 本文详细探讨了HTTP 500内部服务器错误的成因、解决方案及其在Web开发中的影响。通过对具体案例的分析,帮助读者理解并解决此类问题。 ... [详细]
  • 本文介绍了如何使用PHP代码实现微信平台的媒体素材上传功能,详细解释了API接口的使用方法和注意事项,确保文件路径正确以避免常见的错误。 ... [详细]
author-avatar
老谢2502887117
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有