国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > Android > 正文

Android PickerView實(shí)現(xiàn)三級(jí)聯(lián)動(dòng)效果

2019-10-21 21:30:44
字體:
供稿:網(wǎng)友

GitHub有一個(gè)開源控件PickerView,可以實(shí)現(xiàn)三級(jí)聯(lián)動(dòng)的效果。雖然該控件使用非常簡單,但是填充數(shù)據(jù)異常繁瑣。GitHub上的Demo在填充數(shù)據(jù)的時(shí)候是一條一條地填充的,代碼過于冗余。下面提供一種簡便的方式來實(shí)現(xiàn)。

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

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

—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{  /**   *  存儲(chǔ)所有的解析對(duì)象   */  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    {      //選項(xiàng)選擇器      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();      //獲取解析出來的數(shù)據(jù)      mProvinces = (ArrayList<ProvinceModel>) handler.getDataList();    }    catch (Throwable e)    {      e.printStackTrace();    }    if (mProvinces != null)    {      for (ProvinceModel p : mProvinces)      {        List<CityModel> cities = p.getCityList();        //組裝城市數(shù)據(jù)        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);      }    }  }}

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

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持VEVB武林網(wǎng)。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到Android開發(fā)頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 神池县| 皮山县| 景东| 弥勒县| 沁阳市| 河间市| 宁强县| 新乡市| 和田市| 呼伦贝尔市| 英山县| 大丰市| 宁德市| 福建省| 泌阳县| 樟树市| 青铜峡市| 金乡县| 余庆县| 连江县| 盐池县| 大洼县| 都匀市| 开封市| 平泉县| 太仓市| 桐乡市| 张家川| 建湖县| 桦南县| 曲阜市| 阳信县| 吉木乃县| 盐津县| 江城| 海口市| 凤阳县| 手游| 邵阳县| 榕江县| 华宁县|