效果图

实现

1
2
3

@BindView(R.id.recive_address_txt)
TextView mReciveAddressTxt;

根据tab的深度和前一项选择的id,获取下一级菜单项
下一级的数据都是由上一级参数网络请求而来

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142

mReciveAddressTxt.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

Selector selector = new Selector(getActivity(), 3);

selector.setDataProvider(new DataProvider() {
@Override
public void provideData(int currentDeep, int preId, DataReceiver receiver) {
//根据tab的深度和前一项选择的id,获取下一级菜单项
Log.i(TAG, "provideData: currentDeep >>> " + currentDeep + " preId >>> " + preId);
// ApiManager.getBaimiApi().getCity()

switch (currentDeep) {
case 0:
if (proviceList.size() > 0) {
receiver.send(getDatas(proviceList));
return;
}
ApiManager.getBaimiApi().getProvince().subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<ApiResult<List<String>>>() {
@Override
public void onCompleted() {

}

@Override
public void onError(Throwable e) {

}

@Override
public void onNext(ApiResult<List<String>> listApiResult) {
if (listApiResult.getContent().size() > 0) {
proviceList = listApiResult.getContent();
receiver.send(getDatas(proviceList));
}
}
});
break;
case 1:

ApiManager.getBaimiApi().getCity(proviceList.get(preId))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<ApiResult<List<String>>>() {
@Override
public void onCompleted() {

}

@Override
public void onError(Throwable e) {

}

@Override
public void onNext(ApiResult<List<String>> listApiResult) {
if (listApiResult.getFlag().equals("1") || listApiResult.getContent().size() > 0) {
cityList = listApiResult.getContent();
receiver.send(getDatas(cityList));
}

}
});
break;
case 2:
ApiManager.getBaimiApi().getArea(cityList.get(preId))
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Subscriber<ApiResult<List<String>>>() {
@Override
public void onCompleted() {

}

@Override
public void onError(Throwable e) {

}

@Override
public void onNext(ApiResult<List<String>> listApiResult) {
if (listApiResult.getFlag().equals("1") || listApiResult.getContent().size() > 0) {
areaList = listApiResult.getContent();
receiver.send(getDatas(areaList));
}
}
});
break;
}

}

private ArrayList<ISelectAble> getDatas(List<String> list) {
int count = list.size();
ArrayList<ISelectAble> data = new ArrayList<>(count);
for (int j = 0; j < count; j++) {

int finalJ = j;
data.add(new ISelectAble() {
@Override
public String getName() {
return list.get(finalJ);
}

@Override
public int getId() {
return finalJ;
}

@Override
public Object getArg() {
return this;
}
});
}
return data;
}


});
selector.setSelectedListener(new SelectedListener() {
@Override
public void onAddressSelected(ArrayList<ISelectAble> selectAbles) {
String result = "";
for (ISelectAble selectAble : selectAbles) {
result += selectAble.getName() + " ";
}
// Toast.makeText(getActivity(), result, Toast.LENGTH_SHORT).show();
mReciveAddressTxt.setText(result);
}
});

BottomDialog dialog = new BottomDialog(getActivity());
dialog.init(getActivity(), selector);
dialog.show();

}
});

库地址

https://github.com/dunwen/JDSelector

https://github.com/chihane/JDAddressSelector