Skip to content

Commit 4d4da53

Browse files
committed
添加双项选择器,类似于2级联动选择器,但数据不联动
1 parent d67b91f commit 4d4da53

4 files changed

Lines changed: 143 additions & 9 deletions

File tree

README.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,14 @@
44
[![JitPack](https://jitpack.io/v/gzu-liyujiang/AndroidPicker.svg)](https://jitpack.io/#gzu-liyujiang/AndroidPicker)
55
[![Build Status](https://travis-ci.org/gzu-liyujiang/AndroidPicker.svg?branch=master)](https://travis-ci.org/gzu-liyujiang/AndroidPicker)
66

7-
安卓选择器类库,包括日期及时间选择器(可设置范围)、单项选择器(可用于性别、职业、学历、星座等)、城市地址选择器(分省级、地级及县级)、数字选择器(可用于年龄、身高、体重、温度等)、颜色选择器、文件及目录选择器等……
7+
安卓选择器类库,包括日期及时间选择器(可设置范围)、单项选择器(可用于性别、职业、学历、星座等)、城市地址选择器(分省级、地级及县级)、数字选择器(可用于年龄、身高、体重、温度等)、双项选择器、颜色选择器、文件及目录选择器等……
88
欢迎大伙儿在[Issues](https://github.com/gzu-liyujiang/AndroidPicker/issues)提交你的意见或建议。
99
欢迎Fork & Pull requests贡献您的代码,大家共同学习【[AndroidPicker交流群 604235437](https://jq.qq.com/?_wv=1027&k=42bKOeD)】。
1010
[查看更新日志](https://github.com/gzu-liyujiang/AndroidPicker/blob/master/ChangeLog.md),新版本可能未对旧版API作兼容处理,升级后若编译报错请根据错误提示更改。
1111

1212
# Install
1313
“app”是测试用例;“library”包括WheelPicker、ColorPicker、FilePicker,
14-
WheelPicker包括DatePicker、TimePicker、OptionPicker、LinkagePicker、AddressPicker、NumberPicker、CarNumberPicker等
14+
WheelPicker包括DatePicker、TimePicker、OptionPicker、LinkagePicker、AddressPicker、NumberPicker、DoublePicker等
1515
#### ~~懒人建议直接远程加载jcenter里的~~
1616
WheelPicker、FilePicker及ColorPicker是独立的,需要用哪个就compile哪个。
1717
latest.release表示使用最新版,也可以[参照此处指定具体的版本号](https://github.com/gzu-liyujiang/AndroidPicker/releases),1.3.x之前的版本基于ScrollView,1.4.x版本基于ListView,1.5.x之后的版本基于View:
@@ -78,7 +78,7 @@ picker.setFooterView(...);
7878
});
7979
picker.show();
8080
```
81-
核心滚轮控件为WheelView,可以参照SinglePicker、DateTimePicker及LinkagePicker自行扩展。
81+
<font color="#FF0000">核心滚轮控件为WheelView,可以参照SinglePicker、DateTimePicker及LinkagePicker自行扩展。</font>
8282

8383
# Screenshots
8484
![滑轮选择器内嵌效果图](/screenshots/nestwheelview.jpg)
@@ -95,9 +95,9 @@ picker.setFooterView(...);
9595
![目录选择器效果图](/screenshots/dir.png)
9696

9797
# Thanks
98-
[基于View的WheelView](https://github.com/weidongjian/androidWheelView)
99-
[基于ListView的WheelView](https://github.com/venshine/WheelView)
100-
[基于ScrollView的WheelView](https://github.com/wangjiegulu/WheelView)
98+
[基于View的WheelView](https://github.com/weidongjian/androidWheelView)<br />
99+
[基于ListView的WheelView](https://github.com/venshine/WheelView)<br />
100+
[基于ScrollView的WheelView](https://github.com/wangjiegulu/WheelView)<br />
101101

102102

103103
# Contact

app/src/main/java/cn/qqtheme/androidpicker/MainActivity.java

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import cn.qqtheme.framework.picker.ColorPicker;
2323
import cn.qqtheme.framework.picker.DatePicker;
2424
import cn.qqtheme.framework.picker.DateTimePicker;
25+
import cn.qqtheme.framework.picker.DoublePicker;
2526
import cn.qqtheme.framework.picker.FilePicker;
2627
import cn.qqtheme.framework.picker.LinkagePicker;
2728
import cn.qqtheme.framework.picker.NumberPicker;
@@ -216,6 +217,31 @@ public void onOptionPicked(int index, String item) {
216217
picker.show();
217218
}
218219

220+
public void onDoublePicker(View view) {
221+
final ArrayList<String> firstData = new ArrayList<>();
222+
firstData.add("2017年5月2日星期二");
223+
firstData.add("2017年5月3日星期三");
224+
firstData.add("2017年5月4日星期四");
225+
firstData.add("2017年5月5日星期五");
226+
firstData.add("2017年5月6日星期六");
227+
final ArrayList<String> secondData = new ArrayList<>();
228+
secondData.add("电动自行车");
229+
secondData.add("二轮摩托车");
230+
secondData.add("私家小汽车");
231+
secondData.add("公共交通汽车");
232+
final DoublePicker picker = new DoublePicker(this, firstData, secondData);
233+
picker.setDividerVisible(false);
234+
picker.setShadowColor(Color.DKGRAY, 80);
235+
picker.setSelectedIndex(2, 1);
236+
picker.setOnPickListener(new DoublePicker.OnPickListener() {
237+
@Override
238+
public void onPicked(int selectedFirstIndex, int selectedSecondIndex) {
239+
showToast(firstData.get(selectedFirstIndex) + " " + secondData.get(selectedSecondIndex));
240+
}
241+
});
242+
picker.show();
243+
}
244+
219245
public void onLinkagePicker(View view) {
220246
LinkagePicker.DataProvider provider = new LinkagePicker.DataProvider() {
221247

app/src/main/res/layout/activity_main.xml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,12 @@
7878
android:onClick="onOptionPicker"
7979
android:text="单项选择"/>
8080

81+
<Button
82+
android:layout_width="match_parent"
83+
android:layout_height="wrap_content"
84+
android:onClick="onDoublePicker"
85+
android:text="双项选择"/>
86+
8187
<Button
8288
android:layout_width="match_parent"
8389
android:layout_height="wrap_content"

library/WheelPicker/src/main/java/cn/qqtheme/framework/picker/DoublePicker.java

Lines changed: 105 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,25 +2,127 @@
22

33
import android.app.Activity;
44
import android.support.annotation.NonNull;
5+
import android.view.Gravity;
56
import android.view.View;
7+
import android.widget.LinearLayout;
8+
9+
import java.util.ArrayList;
10+
import java.util.List;
11+
12+
import cn.qqtheme.framework.widget.WheelView;
613

714
/**
815
* 双项选择器,选择两项,数据不联动。
9-
* <p>
16+
* <p/>
1017
* Author:李玉江[QQ:1032694760]
1118
* DateTime:2017/5/1 8:34
1219
* Builder:Android Studio
1320
*/
1421
public class DoublePicker extends WheelPicker {
22+
private List<String> firstData = new ArrayList<>();
23+
private List<String> secondData = new ArrayList<>();
24+
private int selectedFirstIndex = 0;
25+
private int selectedSecondIndex = 0;
26+
private OnWheelListener onWheelListener;
27+
private OnPickListener onPickListener;
1528

16-
public DoublePicker(Activity activity) {
29+
public DoublePicker(Activity activity, List<String> firstData, List<String> secondData) {
1730
super(activity);
31+
this.firstData = firstData;
32+
this.secondData = secondData;
33+
}
34+
35+
public void setSelectedIndex(int firstIndex, int secondIndex) {
36+
if (firstIndex >= 0 && firstIndex < firstData.size()) {
37+
selectedFirstIndex = firstIndex;
38+
}
39+
if (secondIndex >= 0 && secondIndex < secondData.size()) {
40+
selectedSecondIndex = secondIndex;
41+
}
42+
}
43+
44+
public String getSelectedFirstItem() {
45+
if (firstData.size() > selectedFirstIndex) {
46+
return firstData.get(selectedFirstIndex);
47+
}
48+
return "";
49+
}
50+
51+
public String getSelectedSecondItem() {
52+
if (secondData.size() > selectedSecondIndex) {
53+
return secondData.get(selectedSecondIndex);
54+
}
55+
return "";
1856
}
1957

2058
@NonNull
2159
@Override
2260
protected View makeCenterView() {
23-
throw new RuntimeException("Stub");
61+
LinearLayout layout = new LinearLayout(activity);
62+
layout.setOrientation(LinearLayout.HORIZONTAL);
63+
layout.setGravity(Gravity.CENTER);
64+
final WheelView firstView = createWheelView();
65+
firstView.setLayoutParams(new LinearLayout.LayoutParams(0, WRAP_CONTENT, 1.0f));
66+
layout.addView(firstView);
67+
final WheelView secondView = createWheelView();
68+
secondView.setLayoutParams(new LinearLayout.LayoutParams(0, WRAP_CONTENT, 1.0f));
69+
layout.addView(secondView);
70+
firstView.setItems(firstData, selectedFirstIndex);
71+
firstView.setOnItemSelectListener(new WheelView.OnItemSelectListener() {
72+
@Override
73+
public void onSelected(int index) {
74+
selectedFirstIndex = index;
75+
if (onWheelListener != null) {
76+
onWheelListener.onFirstWheeled(selectedFirstIndex, firstData.get(selectedFirstIndex));
77+
}
78+
}
79+
});
80+
secondView.setItems(secondData, selectedSecondIndex);
81+
secondView.setOnItemSelectListener(new WheelView.OnItemSelectListener() {
82+
@Override
83+
public void onSelected(int index) {
84+
selectedSecondIndex = index;
85+
if (onWheelListener != null) {
86+
onWheelListener.onSecondWheeled(selectedSecondIndex, secondData.get(selectedSecondIndex));
87+
}
88+
}
89+
});
90+
return layout;
91+
}
92+
93+
@Override
94+
public void onSubmit() {
95+
if (onPickListener != null) {
96+
onPickListener.onPicked(selectedFirstIndex, selectedSecondIndex);
97+
}
98+
}
99+
100+
public void setOnWheelListener(OnWheelListener onWheelListener) {
101+
this.onWheelListener = onWheelListener;
102+
}
103+
104+
public void setOnPickListener(OnPickListener onPickListener) {
105+
this.onPickListener = onPickListener;
106+
}
107+
108+
/**
109+
* 数据条目滑动监听器
110+
*/
111+
public interface OnWheelListener {
112+
113+
void onFirstWheeled(int index, String item);
114+
115+
void onSecondWheeled(int index, String item);
116+
117+
}
118+
119+
/**
120+
* 数据选择完成监听器
121+
*/
122+
public interface OnPickListener {
123+
124+
void onPicked(int selectedFirstIndex, int selectedSecondIndex);
125+
24126
}
25127

26128
}

0 commit comments

Comments
 (0)