欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Android PickerView實現(xiàn)三級聯(lián)動效果

 更新時間:2019年01月07日 08:37:44   作者:Knick_Zhang  
這篇文章主要為大家詳細介紹了Android PickerView實現(xiàn)三級聯(lián)動效果,PickerView實現(xiàn)全國地址的選擇,具有一定的參考價值,感興趣的小伙伴們可以參考一下

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

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

(2)使用SAX解析xml文件中的數(shù)據(jù),并將數(shù)據(jù)填充到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();
      //獲取解析出來的數(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);
      }
    }
  }
}

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

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

相關文章

  • 關于Android短信驗證碼的獲取的示例

    關于Android短信驗證碼的獲取的示例

    本篇文章主要介紹了關于Android短信驗證碼的獲取的示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-08-08
  • Android 中的危險權限詳細整理

    Android 中的危險權限詳細整理

    這篇文章主要介紹了Android 中的危險權限詳細整理的相關資料,Android 中有上百種權限,現(xiàn)在將所有的權限歸為兩類,一類是普通權限,一類的危險權限,危險權限則表示那些可能會觸及到用戶安全隱私或者對設備安全造成影響的權限,需要的朋友可以參考下
    2017-07-07
  • Android項目實現(xiàn)視頻播放器

    Android項目實現(xiàn)視頻播放器

    這篇文章主要為大家詳細介紹了Android項目實現(xiàn)視頻播放器,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-03-03
  • Android項目實戰(zhàn)之百度地圖地點簽到功能

    Android項目實戰(zhàn)之百度地圖地點簽到功能

    這篇文章主要介紹了Android項目實戰(zhàn)之百度地圖地點簽到功能,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-04-04
  • Android動畫之小球擬合動畫實例

    Android動畫之小球擬合動畫實例

    這篇文章主要介紹了Android動畫之小球擬合動畫實例的相關資料,需要的朋友可以參考下
    2017-07-07
  • Android自定義控件之創(chuàng)建可復用的組合控件

    Android自定義控件之創(chuàng)建可復用的組合控件

    這篇文章主要為大家詳細介紹了Android自定義控件之創(chuàng)建可復用的組合控件,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • Android開發(fā)中的單例模式應用詳解

    Android開發(fā)中的單例模式應用詳解

    這篇文章主要介紹了Android開發(fā)中的單例模式應用,結合實例形式詳細分析了Android開發(fā)中常用單例模式的實現(xiàn)與使用方法,需要的朋友可以參考下
    2018-01-01
  • Android開發(fā)實現(xiàn)的自動換圖片、輪播圖效果示例

    Android開發(fā)實現(xiàn)的自動換圖片、輪播圖效果示例

    這篇文章主要介紹了Android開發(fā)實現(xiàn)的自動換圖片、輪播圖效果,涉及Android ImageView及界面布局相關操作技巧,需要的朋友可以參考下
    2019-03-03
  • Android通過手勢實現(xiàn)答題器翻頁效果

    Android通過手勢實現(xiàn)答題器翻頁效果

    這篇文章主要為大家詳細介紹了Android通過手勢實現(xiàn)答題器翻頁效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-05-05
  • Android 5秒學會使用手勢解鎖功能

    Android 5秒學會使用手勢解鎖功能

    本文講述的是一個手勢解鎖的庫,可以定制顯示隱藏宮格點、路徑、并且?guī)в行【艑m格顯示圖,和震動!讓你學會使用這個簡單,高效的庫,好了,具體內容詳情大家通過本文學習吧
    2017-12-12

最新評論