亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > Android > 正文

Android PickerView實現三級聯動效果

2019-10-21 21:30:44
字體:
來源:轉載
供稿:網友

GitHub有一個開源控件PickerView,可以實現三級聯動的效果。雖然該控件使用非常簡單,但是填充數據異常繁瑣。GitHub上的Demo在填充數據的時候是一條一條地填充的,代碼過于冗余。下面提供一種簡便的方式來實現。

(1)在app目錄下新建一個assets文件夾,將province_data.xml文件復制到該文件夾下,該XML文件里保存了全國的省市縣的地址數據。

(2)使用SAX解析xml文件中的數據,并將數據填充到PickerView這個控件中。

—ProvinceModel—

 

public class ProvinceModel implements IPickerViewData{  private String name;  private List<CityModel> cityList;  public ProvinceModel()  {    super();  }  public String getName()  {    return name;  }  public void setName(String name)  {    this.name = name;  }  public List<CityModel> getCityList()  {    return cityList;  }  public void setCityList(List<CityModel> cityList)  {    this.cityList = cityList;  }  @Override  public String getPickerViewText()  {    return name;  }}

—CityModel—

public class CityModel implements IPickerViewData{  private String name;  private List<DistrictModel> districtList;  public CityModel()  {    super();  }  public String getName()  {    return name;  }  public void setName(String name)  {    this.name = name;  }  public List<DistrictModel> getDistrictList()  {    return districtList;  }  public void setDistrictList(List<DistrictModel> districtList)  {    this.districtList = districtList;  }  @Override  public String toString()  {    return name;  }  @Override  public String getPickerViewText()  {    return name;  }}

—DistrictModel—

public class DistrictModel implements IPickerViewData{  private String name;  private String zipcode;  public DistrictModel()  {    super();  }  public String getZipcode()  {    return zipcode;  }  public void setZipcode(String zipcode)  {    this.zipcode = zipcode;  }  public String getName()  {    return name;  }  public void setName(String name)  {    this.name = name;  }  @Override  public String toString()  {    return name;  }  @Override  public String getPickerViewText()  {    return name;  }}

—XmlParserHandler—

 

public class XmlParserHandler extends DefaultHandler{  /**   *  存儲所有的解析對象   */  private List<ProvinceModel> provinceList = new ArrayList<>();  private ProvinceModel provinceModel = new ProvinceModel();  private CityModel cityModel = new CityModel();  private DistrictModel districtModel = new DistrictModel();  public XmlParserHandler(){}  public List<ProvinceModel> getDataList()  {    return provinceList;  }  @Override  public void startDocument() throws SAXException  {    super.startDocument();  }  @Override  public void endDocument() throws SAXException  {    super.endDocument();  }  @Override  public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException  {    if (qName.equals("province"))    {      provinceModel = new ProvinceModel();      provinceModel.setName(attributes.getValue(0));      provinceModel.setCityList(new ArrayList<CityModel>());    }    else if (qName.equals("city"))    {      cityModel = new CityModel();      cityModel.setName(attributes.getValue(0));      cityModel.setDistrictList(new ArrayList<DistrictModel>());    }    else if (qName.equals("district"))    {      districtModel = new DistrictModel();      districtModel.setName(attributes.getValue(0));      districtModel.setZipcode(attributes.getValue(1));    }  }  @Override  public void endElement(String uri, String localName, String qName) throws SAXException  {    if(qName.equals("district"))    {      cityModel.getDistrictList().add(districtModel);    }    else if(qName.equals("city"))    {      provinceModel.getCityList().add(cityModel);    }    else if(qName.equals("province"))    {      provinceList.add(provinceModel);    }  }  @Override  public void characters(char[] ch, int start, int length) throws SAXException  {    super.characters(ch, start, length);  }}

 

public class AddressAddActivity extends BaseActivity{  private OptionsPickerView mCityPickerView;  private ArrayList<ProvinceModel> mProvinces = new ArrayList<>();  private ArrayList<ArrayList<CityModel>> mCities = new ArrayList<>();  private ArrayList<ArrayList<ArrayList<DistrictModel>>> mDistricts = new ArrayList<>();  @Override  protected void onCreate(@Nullable Bundle savedInstanceState)  {    super.onCreate(savedInstanceState);    supportRequestWindowFeature(Window.FEATURE_NO_TITLE);    setContentView(R.layout.activity_address_add);    ViewUtils.inject(this);    init();  }  private void init()  {    initProvinceDatas();    try    {      //選項選擇器      mCityPickerView = new OptionsPickerView(this);      mCityPickerView.setPicker( mProvinces, mCities, mDistricts, true);      mCityPickerView.setTitle("選擇城市");      mCityPickerView.setCyclic(false, false , false);      mCityPickerView.setOnoptionsSelectListener(new OptionsPickerView.OnOptionsSelectListener() {        @Override        public void onOptionsSelect(int options1, int option2, int options3)        {          String address = mProvinces.get(options1).getName() + " "              + mCities.get(options1).get(option2) + " "              + mDistricts.get(options1).get(option2).get(options3);          mTxtAddress.setText(address);        }      });    }    catch (Exception e)    {      e.printStackTrace();    }  }  @OnClick(R.id.ll_city_picker)  public void showpickerView(View view)  {    mCityPickerView.show();  }  protected void initProvinceDatas()  {    AssetManager asset = getAssets();    try    {      InputStream input = asset.open("province_data.xml");      SAXParserFactory spf = SAXParserFactory.newInstance();      SAXParser parser = spf.newSAXParser();      XmlParserHandler handler = new XmlParserHandler();      parser.parse(input , handler);      input.close();      //獲取解析出來的數據      mProvinces = (ArrayList<ProvinceModel>) handler.getDataList();    }    catch (Throwable e)    {      e.printStackTrace();    }    if (mProvinces != null)    {      for (ProvinceModel p : mProvinces)      {        List<CityModel> cities = p.getCityList();        //組裝城市數據        mCities.add((ArrayList<CityModel>) cities);        ArrayList<ArrayList<DistrictModel>> dts = new ArrayList<>();        for (CityModel c : cities)        {          List<DistrictModel> districts = c.getDistrictList();          dts.add((ArrayList<DistrictModel>) districts);        }        mDistricts.add(dts);      }    }  }}

到此完畢,很簡單的例子。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持VEVB武林網。


注:相關教程知識閱讀請移步到Android開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美一级片在线播放| 狠狠做深爱婷婷久久综合一区| 国产成人自拍视频在线观看| 日韩国产高清污视频在线观看| 中文字幕精品影院| 亚洲男人的天堂网站| 久久免费国产精品1| 亚洲国产精品久久| 成人av电影天堂| 欧美午夜激情在线| 欧美日韩国产在线| 97视频在线播放| 欧美在线一级视频| 美日韩丰满少妇在线观看| 热门国产精品亚洲第一区在线| 久热国产精品视频| 欧美日韩午夜视频在线观看| 成人h片在线播放免费网站| 久久久久久国产精品久久| 久久精品国产亚洲| 国产v综合v亚洲欧美久久| 日韩高清中文字幕| 欧美一级大片在线观看| 国产精品电影在线观看| 国产精品视频一区二区高潮| 欧美亚洲另类激情另类| 国产精品久久久av| 久久夜色精品亚洲噜噜国产mv| 日韩精品视频中文在线观看| 国产精品视频在线播放| 国产精品久久二区| 日韩欧美亚洲成人| 国产91久久婷婷一区二区| 一区二区三区高清国产| 亚洲综合精品伊人久久| 欧美亚洲在线视频| 亚洲男人天堂九九视频| 黄色成人av网| 欧美黄色片免费观看| 91精品国产电影| 亚洲美女免费精品视频在线观看| 国产精品免费福利| 中文字幕视频一区二区在线有码| 成人有码在线播放| 国产丝袜高跟一区| 国产区精品在线观看| 成人精品一区二区三区电影免费| 国产精品视频在线播放| 国产精品久久久精品| 国产97人人超碰caoprom| 国产一区二区三区精品久久久| 91精品久久久久久久久久另类| 法国裸体一区二区| 亚洲第一网站免费视频| 91亚洲国产精品| 91福利视频网| 久久免费视频这里只有精品| 亚洲一区二区三区sesese| 亚洲国产一区二区三区四区| 亚洲精品456在线播放狼人| 久久亚洲成人精品| 亚洲色图狂野欧美| 国产日韩精品综合网站| 国产欧美亚洲精品| 亚洲直播在线一区| 777国产偷窥盗摄精品视频| 亚洲一区二区久久久久久久| 精品亚洲永久免费精品| 欧美成人激情图片网| 成人网在线免费看| 中文字幕久热精品在线视频| 92福利视频午夜1000合集在线观看| 91精品视频在线播放| 美女扒开尿口让男人操亚洲视频网站| 少妇激情综合网| www.99久久热国产日韩欧美.com| 欧美一级视频一区二区| 少妇精69xxtheporn| 亚洲xxxx在线| 91精品久久久久久久久不口人| 深夜福利日韩在线看| 中文国产成人精品久久一| 国产亚洲成av人片在线观看桃| 欧美日韩中文字幕在线| 91系列在线播放| 日韩精品一二三四区| 欧美黄色www| 在线看国产精品| 欧美色视频日本高清在线观看| 日本精品免费观看| 91免费在线视频| 亚洲影视中文字幕| 成人午夜激情免费视频| 国产69精品久久久久9999| 一本色道久久88精品综合| 狠狠综合久久av一区二区小说| 大荫蒂欧美视频另类xxxx| 亚洲成人久久一区| 欧美激情综合色综合啪啪五月| 久久午夜a级毛片| 成人网在线观看| 国内精品一区二区三区四区| 国产男女猛烈无遮挡91| 亚洲欧美国产一本综合首页| 国产视频精品xxxx| 裸体女人亚洲精品一区| 亚洲美女动态图120秒| 国产主播精品在线| 国产精品高清网站| 中文在线不卡视频| 色一情一乱一区二区| 国内精品模特av私拍在线观看| 欧美性jizz18性欧美| 亚洲福利视频二区| 国产91精品黑色丝袜高跟鞋| 国产精品美女免费看| 久久影院免费观看| 国产www精品| 国产精品视频地址| 欧美性极品xxxx做受| 精品一区二区三区四区在线| 中文字幕无线精品亚洲乱码一区| 国产美女主播一区| 国产亚洲a∨片在线观看| 狠狠操狠狠色综合网| 亚洲国产毛片完整版| 亚洲日本欧美日韩高观看| 国产精品久久久久久久久久三级| 欧美激情女人20p| 91精品久久久久久久久久| 国产精品美女av| 亚洲www在线| 亚洲激情第一页| 欧美性猛交xxxx乱大交| 国产福利视频一区二区| 亚洲天堂成人在线| 久久久久免费精品国产| 欧美午夜激情在线| 精品国产精品自拍| 日韩视频免费中文字幕| 欧美成人sm免费视频| 亚洲福利精品在线| 庆余年2免费日韩剧观看大牛| 清纯唯美亚洲激情| 精品小视频在线| 久久精品色欧美aⅴ一区二区| 欧美一区二三区| 久久99国产精品自在自在app| 久久久亚洲福利精品午夜| 国产精品久久久久av免费| 色婷婷**av毛片一区| 55夜色66夜色国产精品视频| 国产午夜精品一区理论片飘花| 最新国产成人av网站网址麻豆| 亚洲欧美第一页| 亚洲国产高清自拍| 国产精品入口尤物| 高清欧美性猛交xxxx黑人猛交| 亚洲精品小视频在线观看| 日韩最新中文字幕电影免费看| 国语自产在线不卡| 欧美成人精品在线视频| 日韩av综合中文字幕| 国产精品色悠悠|