Android省市區(qū)三級聯(lián)動(dòng)控件使用方法實(shí)例講解
最近有需求需要實(shí)現(xiàn)省市區(qū)三級聯(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ù)源,我對數(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ù)按照一定的格式組件成三級數(shù)據(jù)List,這里可能會有一點(diǎn)復(fù)雜,需要在組裝的過程中小心一定,省市區(qū)要對應(yīng)不然數(shù)據(jù)會錯(cuò)亂。組裝數(shù)據(jù)源,最后得到省市區(qū)對應(yīng)的List:
private List<IWheelViewModel> mOneItems = new ArrayList<>(); private List<List<IWheelViewModel>> mTwoItems; private List<List<List<IWheelViewModel>>> mThreeItems;
將數(shù)據(jù)源填充到View中:
//設(shè)置三級數(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中提供了對應(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è)置三級數(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ū)的三級聯(lián)動(dòng),還可以自己參考AddressPickerView定制自己想要的滾動(dòng)選擇框。這里只討論省市區(qū)這種場景,其他的場景可以自己實(shí)現(xiàn)。
如果覺得有用,歡迎star,如果覺得有問題,歡迎給出建議。
https://github.com/hgchenkai/WheelView
以上所述是小編給大家介紹的Android省市區(qū)三級聯(lián)動(dòng)控件使用方法實(shí)例講解,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時(shí)回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
- Android PickerView實(shí)現(xiàn)三級聯(lián)動(dòng)效果
- Android實(shí)現(xiàn)省市區(qū)三級聯(lián)動(dòng)
- 最好用的Android省市區(qū)三級聯(lián)動(dòng)選擇效果
- Android日期選擇器實(shí)現(xiàn)年月日三級聯(lián)動(dòng)
- Android中使用開源框架Citypickerview實(shí)現(xiàn)省市區(qū)三級聯(lián)動(dòng)選擇
- Android自定義WheelView地區(qū)選擇三級聯(lián)動(dòng)
- android-wheel控件實(shí)現(xiàn)三級聯(lián)動(dòng)效果
- Android使用android-wheel實(shí)現(xiàn)省市縣三級聯(lián)動(dòng)
- Android實(shí)現(xiàn)聯(lián)動(dòng)下拉框 下拉列表spinner的實(shí)例代碼
- Android實(shí)現(xiàn)城市選擇三級聯(lián)動(dòng)
相關(guān)文章
Android開發(fā)者常見的UI組件總結(jié)大全
Android開發(fā)中UI組件是構(gòu)建用戶界面的基本元素,下面這篇文章主要給大家介紹了關(guān)于Android開發(fā)者常見的UI組件總結(jié)的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-04-04Android實(shí)現(xiàn)USB掃碼槍獲取掃描內(nèi)容
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)USB掃碼槍獲取掃描內(nèi)容,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09android 復(fù)制 粘貼 剪切功能應(yīng)用
網(wǎng)上有很多android 復(fù)制 粘貼 剪切功能的文章,只是放到自己的程序中不知道如何處理,現(xiàn)在尋得一可行方法,需要的朋友可以參考下2012-11-11android開發(fā)仿ios的UIScrollView實(shí)例代碼
下面小編就為大家分享一篇android開發(fā)仿ios的UIScrollView實(shí)例代碼,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-01-01Android將Glide動(dòng)態(tài)加載不同大小的圖片切圓角與圓形的方法
這篇文章主要給大家介紹了關(guān)于Android如何將Glide動(dòng)態(tài)加載不同大小的圖片切圓角與圓形的方法,文中通過示例代碼介紹的非常吸納關(guān)系,對各位Android開發(fā)者們具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧。2017-11-11Android實(shí)現(xiàn)可播放GIF動(dòng)畫的ImageView
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)可播放GIF動(dòng)畫的ImageView,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-09-09Flutter定時(shí)器、倒計(jì)時(shí)的快速上手及實(shí)戰(zhàn)講解
這篇文章主要給大家介紹了關(guān)于Flutter定時(shí)器、倒計(jì)時(shí)的快速上手及實(shí)戰(zhàn)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Flutter具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06