Android省市區(qū)三級(jí)聯(lián)動(dòng)控件使用方法實(shí)例講解
最近有需求需要實(shí)現(xiàn)省市區(qū)三級(jí)聯(lián)動(dòng),但是發(fā)現(xiàn)之前的實(shí)現(xiàn)不夠靈活,自己做了一些優(yōu)化。為了方便以后使用,抽離出來放在了github上WheelView。同時(shí)把其核心庫放在了JCenter中了,可以直接引用。也可以參考項(xiàng)目中的Demo進(jìn)行引用
下面介紹一下如何使用
如果用的是AndroidStudio那么直接在build.gradle文件中添加依賴:
dependencies {
compile 'chuck.WheelItemView:library:1.0.1'
}
成功引入庫之后,可以在需要彈出省市區(qū)選擇框的頁面生成一AddressPickerView 實(shí)例。
pickerView = new AddressPickerView(this);
下面來說說需要的數(shù)據(jù)源,我對(duì)數(shù)據(jù)做了抽象,在使用的時(shí)候,將自己的數(shù)據(jù)model實(shí)現(xiàn)IWheelViewModel接口就可以了,如下:
public class AddressModel implements IWheelViewModel {
public String addressName;
public String addressId;
@Override
public String getValueString() {
return addressName;
}
@Override
public String getValueId() {
return addressId;
}
}
而后,就是講你自己從服務(wù)器或者本地?cái)?shù)據(jù)庫得到到的數(shù)據(jù)按照一定的格式組件成三級(jí)數(shù)據(jù)List,這里可能會(huì)有一點(diǎn)復(fù)雜,需要在組裝的過程中小心一定,省市區(qū)要對(duì)應(yīng)不然數(shù)據(jù)會(huì)錯(cuò)亂。組裝數(shù)據(jù)源,最后得到省市區(qū)對(duì)應(yīng)的List:
private List<IWheelViewModel> mOneItems = new ArrayList<>(); private List<List<IWheelViewModel>> mTwoItems; private List<List<List<IWheelViewModel>>> mThreeItems;
將數(shù)據(jù)源填充到View中:
//設(shè)置三級(jí)數(shù)據(jù) pickerView.setPickerData(mOneItems, mTwoItems, mThreeItems, true);
給確定和關(guān)閉按鈕設(shè)置監(jiān)聽:
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) {
}
});
如果不做特殊的設(shè)置,選中字體和非中字體都有默認(rèn)的顏色和大小,如果想改變這些屬性,我也在AddressPickerView中提供了對(duì)應(yīng)的方法:
/** * 被選中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)
設(shè)置完這些屬性之后,直接調(diào)用show()方法就可以彈出這個(gè)選擇框了。
完整的代碼:
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();
//創(chuàng)建實(shí)例
pickerView = new AddressPickerView(this);
//設(shè)置title
pickerView.setTitle("收貨地址");
//設(shè)置被選中文字的顏色
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);
//設(shè)置三級(jí)數(shù)據(jù)
pickerView.setPickerData(mOneItems, mTwoItems, mThreeItems, true);
//設(shè)置確定和關(guān)閉監(jiān)聽
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 = "地區(qū)" + i;
temp1.add(model111);
}
temp.add(temp1);
}
mThreeItems.add(temp);
}
}
public void onClick(View view) {
pickerView.show();
}
}
這些代碼可以參考demo,實(shí)際上,這里只是實(shí)現(xiàn)了省市區(qū)的三級(jí)聯(lián)動(dòng),還可以自己參考AddressPickerView定制自己想要的滾動(dòng)選擇框。這里只討論省市區(qū)這種場(chǎng)景,其他的場(chǎng)景可以自己實(shí)現(xiàn)。
如果覺得有用,歡迎star,如果覺得有問題,歡迎給出建議。
https://github.com/hgchenkai/WheelView
以上所述是小編給大家介紹的Android省市區(qū)三級(jí)聯(lián)動(dòng)控件使用方法實(shí)例講解,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- Android PickerView實(shí)現(xiàn)三級(jí)聯(lián)動(dòng)效果
- Android實(shí)現(xiàn)省市區(qū)三級(jí)聯(lián)動(dòng)
- 最好用的Android省市區(qū)三級(jí)聯(lián)動(dòng)選擇效果
- Android日期選擇器實(shí)現(xiàn)年月日三級(jí)聯(lián)動(dòng)
- Android中使用開源框架Citypickerview實(shí)現(xiàn)省市區(qū)三級(jí)聯(lián)動(dòng)選擇
- Android自定義WheelView地區(qū)選擇三級(jí)聯(lián)動(dòng)
- android-wheel控件實(shí)現(xiàn)三級(jí)聯(lián)動(dòng)效果
- Android使用android-wheel實(shí)現(xiàn)省市縣三級(jí)聯(lián)動(dòng)
- Android實(shí)現(xiàn)聯(lián)動(dòng)下拉框 下拉列表spinner的實(shí)例代碼
- Android實(shí)現(xiàn)城市選擇三級(jí)聯(lián)動(dòng)
相關(guān)文章
android:TextView簡(jiǎn)單設(shè)置文本樣式和超鏈接的方法
這篇文章主要介紹了android:TextView簡(jiǎn)單設(shè)置文本樣式和超鏈接的方法,涉及TextView常見文字屬性的相關(guān)操作技巧,需要的朋友可以參考下2016-08-08
Android中AOP的應(yīng)用實(shí)踐之過濾重復(fù)點(diǎn)擊
這篇文章主要給大家介紹了關(guān)于Android中AOP的應(yīng)用實(shí)踐之過濾重復(fù)點(diǎn)擊的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)各位Android開發(fā)者們具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-09-09
Android 實(shí)現(xiàn)背景圖和狀態(tài)欄融合方法
下面小編就為大家分享一篇Android 實(shí)現(xiàn)背景圖和狀態(tài)欄融合方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-01-01
Android編程實(shí)現(xiàn)啟動(dòng)另外的APP及傳遞參數(shù)的方法
這篇文章主要介紹了Android編程實(shí)現(xiàn)啟動(dòng)另外的APP及傳遞參數(shù)的方法,涉及Activity啟動(dòng)及Intent設(shè)置相關(guān)操作技巧,需要的朋友可以參考下2017-05-05
Android中使用ZXing生成二維碼(支持添加Logo圖案)
ZXing是谷歌的一個(gè)開源庫,可以用來生成二維碼、掃描二維碼。接下來通過本文給大家介紹Android中使用ZXing生成二維碼(支持添加Logo圖案),需要的朋友參考下2017-01-01
android調(diào)用國(guó)家氣象局天氣預(yù)報(bào)接口json數(shù)據(jù)格式解釋
平時(shí)我們?cè)陂_發(fā)的過程中有時(shí)會(huì)要用到天氣預(yù)報(bào)的信息,國(guó)家氣象局為我們提供了天氣預(yù)報(bào)的接口,只需要我們?nèi)ソ馕鼍托辛?。很方便很好?/div> 2013-11-11
Android 控制ScrollView滾動(dòng)的實(shí)例詳解
這篇文章主要介紹了Android 控制ScrollView滾動(dòng)的實(shí)例詳解的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下2017-10-10
Android垃圾回收機(jī)制及程序優(yōu)化System.gc
這篇文章主要介紹了Android垃圾回收機(jī)制及程序優(yōu)化System.gc的相關(guān)資料,需要的朋友可以參考下2016-01-01最新評(píng)論

