先说需求:要求点开的时候是如图1所示;当第一列滚动到24岁时,第二列从24开始显示,符合选择逻辑。

图1

图2

这里主要涉及到PickerView 数据的构建,具体PickerView的用法请参照其他文章。

1.明确构建目标

mPickerView = new OptionsPickerBuilder(this, new OnOptionsSelectListener() {

//这里写显示逻辑

@Override

public void onOptionsSelect(int options1, int options2, int options3, View v) {

}).setTitleBgColor(0xffedbd5a)//标题背景颜色 Night mode

.setSubmitColor(R.color.black)

.setCancelColor(R.color.black)//取消按钮文字颜色

.build();

mPickerView.setPicker(list, mOptionsAgeItems);

mPickerView.show();

因为我的显示写的比较多,所以在此省略。我们主要构建的数据是mPickerView.setPicker(list, mOptionsAgeItems);里面的list以及mOptionsAgeItems。

2.明确数据结构

我们需要显示的年龄段是从18岁到100岁之间,那么第一个list集合结构如下。

list数据

重点来了,第二个mOptionsAgeItems集合的结构如下。

mOptionsAgeItems第一级数据

这里可以看到mOptionsAgeItems集合也同样必须是84个子集合(这里的数据数量必须与list的数量一致,否则会报错),每个子集合里又包含了第二个选择器要显示的数据。举个例子,如果我list里面选择19,也就是list的第三个数据。那么此时,第二个选择器的第三条数据最小要从19开始,我们看一下结构。

mOptionsAgeItems第二级数据

需要说明的是,如果是三级数据,比如说省市区联动,第三个选择器里面的数据就是三层嵌套,具体可以看PickView里面省市区的Demo。

明确了这一点,那么我们下面就开始构建数据吧。

3.构建处理数据

talk is cheap,show me the code.

String[] ages = new String[84];

ages[0] = "不限";

for (int i = 1; i <= 83; i++) {

ages[i] = 17 + i + "岁";

}

//利用Arrays.asList转化为集合,注意该方法转化的集合不能够记性add或remove等操作

ageList = Arrays.asList(ages);

mOptionsAgeItems = new ArrayList<>();

//由于需要将ageList作为第一个参数list传入,

// 所以需要一个临时list把ageList的数据存起来转入第二个参数中

List listTemp = new ArrayList<>();

listTemp.clear();

for (int j = 0; j < ageList.size(); j++) {

//将ageList中的数据全部拷贝一份到listTemp里面

listTemp.add(ageList.get(j));

}

for (int k = 0; k < 84; k++) {

//注意:这里必须要在for循环里面new,

//否则mOptionsAgeItems集合里面每个子集合都是一样的

//这里涉及到引用对象地址的唯一性问题,String也是引用对象

List sencondAgeList = new ArrayList<>();

//以下作用就是构建第二级数据的原理,非常简单

if(k>0){

listTemp.remove(0);

}

for(String str:listTemp){

sencondAgeList.add(str);

}

mOptionsAgeItems.add(sencondAgeList);

}

以上,ageList对应mPickerView.setPicker(list, mOptionsAgeItems)里面的list.

我的处理办法有点蠢,冥冥中感觉有更好的解决方案,但是时间原因也没有深究。希望相互讨论学习。

android pickerview 多行,Android PickerView 自定义条件选择器 联动相关推荐

  1. android tablelayout 多行,android – 自定义TableLayout,行中有多个TextView

    我想用这样的行来创建自定义TableLayout: 电视用于TextView,即我想在行中添加11个TextView: 每行以标题开头,然后我添加5对TextView,这样表格行就像屏幕一样宽. 这是 ...

  2. android ellipsize 多行,android TextView多行文本(超过3行)使用ellipsize属性无效问题的解决方法...

    android TextView多行文本(超过3行)使用ellipsize属性无效问题的解决方法 布局文件中的TextView属性 复制代码 代码如下: android:id="@+id/b ...

  3. android tablelayout 多行,Android入门户五篇之TableLayout (二)//生成10行,8列的表格

    当前位置:我的异常网» Android » Android入门户五篇之TableLayout (二)//生成10行,8 Android入门户五篇之TableLayout (二)//生成10行,8列的表 ...

  4. android iperf 命令行,Android 移植之 iperf

    1 .移植准备 1 ,源代码地址: 2 ,解压到 Adroid_root/external/ iperf-2.0.4.tar.gz; tar –zxvf iperf-2.0.4.tar.gz 2. 创 ...

  5. android 通知多行,Android多行通知,例如Gmail应用

    我正在尝试创建一个多行通知,如Gmail应用程序所示,如下图所示(5个通知分组在一个通知下) 我尝试了各种示例,但似乎只能创建单个通知 public void createSingleNotifica ...

  6. android timepicker 不可编辑,iView -- TimePicker 自定义修改时间选择器选择时间面板样式...

    期望的最终效果: 为什么要修改期望效果? 项目需要只选择小时,分钟跟秒的不需要,而官方并没有直接相关的小时组件或者是设置显示成小时或分钟或秒的时间选择器,因为自己直接修改样式. 原生js 代码,如下: ...

  7. Android 仿 iphone 自定义滚动选择器

    转载请标明出处:http://blog.csdn.net/u011546655/article/details/45921025 背景:其实我们都知道,在我们做开发的过程中,会遇到Android 自身 ...

  8. Android前台服务讲解二之自定义通知视图(RemoteViews)及数据UI更新

    Notification支持文字内容显示.震动.三色灯.铃声等多种提示形式,在默认情况下,Notification仅显示消息标题.消息内容.送达时间这3项内容. 1.更新系统通知Notificatio ...

  9. Android自定义滚动选择器

    Android自定义滚动选择器 实现图片的效果 代码如下 package com.linzihui.widget;import android.annotation.SuppressLint; imp ...

  10. 我的Android进阶之旅------Android自定义View来实现解析lrc歌词并同步滚动、上下拖动、缩放歌词的功能...

    前言 一LRC歌词文件简介 1什么是LRC歌词文件 2LRC歌词文件的格式 LRC歌词文件的标签类型 1标识标签 2时间标签 二解析LRC歌词 1读取出歌词文件 2解析得到的歌词内容 1表示每行歌词内 ...

最新文章

  1. 【转载+软件实际操作 OpenHW12参赛手记】ZedBoard-裸机下运行Hello,World【常见错误解决方案】++...
  2. youtube根据vedioId获取视频相关信息
  3. python git切换分支_git命令之切换分支
  4. 文本检测-EAST方法概述
  5. oracle 中查询当前用户可以看到的表名、表对应的所有字段
  6. MyBatis 源码自我解读
  7. 持续集成部署Jenkins工作笔记0021---21.关闭防止跨站点请求伪造
  8. 字段不显示 继承_Springboot Shiro页面按钮显示、路径越权访问题
  9. 大屏数据可视化效果如何提升
  10. winform根据字符串生成HTML静态页
  11. logstash 吞吐量优化_logstash吞吐率优化
  12. 打印机如何手动正反面Mac设置黑白打印
  13. 线上幽灵:世界头号黑客米特尼克自传(体验头号黑客传奇人生,洞悉头号黑客思维模式!启明,绿盟,安天,安全宝,百度,腾讯,阿里……众安全专家一致推荐!)...
  14. IDEA 2020 返回上一步快捷键
  15. linux ps 主进程,Linux ps 查看进程
  16. Vite入门从手写一个乞丐版的Vite开始(下)
  17. Swift5实现ios后台播放语音,腾讯音视频通话后台播放来电铃声
  18. 卡耐基的这100句话,畅销85年,改变了很多人
  19. 计算机软件考试考几天,【软考考试时间是多久?软考时间有多长?】- 环球网校...
  20. HTML5文件选择框(各种类型)

热门文章

  1. linux下载win软件,Linux大神都知道的下载工具,其实Windows平台也能用
  2. 数据结构(C语言版 第2版严蔚敏版)完整课后习题答案汇总
  3. 81_如何用eclipse反编译一个war包或者jar包
  4. c语言 关键字符,c语言关键字有哪些 c语言关键字解释
  5. win10 64位系统 excel2016 vba odbc方式 访问 oracle远程数据库 免安装oracle客户端
  6. 用C语言编写99乘法表
  7. 深信服scsa知识点二
  8. 201711671132《java实用教程》第一章学习总结
  9. 推荐几个最好用的CRM软件,本人亲测
  10. # Unity 自学与进阶必会目录