麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 系統 > 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在线 | 视频一区国产精品 | 99精品国产小情侣高潮露脸在线 | 蜜桃网站在线观看 | 欧美人人干 | 把娇妻调教成暴露狂 | 蜜桃久久一区二区三区 | 免费a视频在线观看 | 宅男噜噜噜66国产免费观看 | 欧美一区二区三区免费观看 | av在线官网 | 欧美日韩精品中文字幕 | 一级成人毛片 | 羞羞视频免费观看入口 | 亚洲性生活免费视频 | 国产福利视频在线观看 | 亚洲草逼视频 | 中文字幕四区 | 久久国产精品久久久久久电车 | 午夜视频色 | 日韩av片在线播放 | 91成人免费网站 | 欧美精品国产综合久久 | 91美女视频在线观看 | 9797色| 免费a视频在线观看 | 欧美一级高潮 | 久久久婷婷 | 黄色网址免费进入 | 午夜小影院 | 成人福利在线 | 欧美日韩视频网站 | 毛片免费视频观看 | 一级黄色毛片免费 | 91美女视频在线 | 日韩一级视频 | 亚洲电影在线播放 | 污视频在线免费播放 | 美国人成人在线视频 | 午夜激情视频免费 | 日本a∨精品中文字幕在线 欧美1—12sexvideos |