a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 系統 > 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电影免费看 | 男女瑟瑟 | 亚洲成a人v欧美综合天堂麻豆 | 亚洲h网站| 欧美日韩一级视频 | 日本精品视频网站 | 日本一区二区三区中文字幕 | 成人激情视频在线观看 | 91精品国产综合久久久久久丝袜 | 国产成人啪午夜精品网站男同 | 欧美乱轮 | youjizz国产| 人人干网站 | 97成人在线 | 久久免费视频一区二区 | 日韩欧美中文国 | 午夜久久久| 欧美成年网站 | 午夜精品网站 | 久久人人爽人人爽人人片av不 | 国产精品99视频 | 一级黄色影片在线观看 | 精品国产污污免费网站入口 | 久久不射电影网 | 中文字幕 欧美 日韩 | 国产精品久久久久久久久久久久久 | 日本午夜一区二区 | 国产高清视频在线 | 久久午夜影院 | 欧美成人a∨高清免费观看 99精品欧美一区二区三区 | 红色av社区| 亚洲高清在线看 | 国产欧精精久久久久久久 | 黄色毛片av | 国产精品久久久久久亚洲影视 |