android 省市区选择器
来源:互联网 发布:三网合一网络箱 编辑:程序博客网 时间:2024/06/05 06:09
选择dialog
/** * 区域选择Dialog * Created by 梅西 on 2016/7/27. */public class DialogAreaChose extends Dialog implements View.OnClickListener, OnWheelScrollListener { private PickerScrollView scrollProvince, scrollCity, scrollDistrict; private Context context; private String[] mProvinceDatas;//所有省 private AreaChoseListener areaChoseListener; private Map<String, String[]> mCitisDatasMap = new HashMap<>();//key - 省 value - 市 private Map<String, String[]> mDistrictDatasMap = new HashMap<>(); //key - 市 values - 区 private String mCurrentProviceName;//当前省的名称 private String mCurrentCityName;//当前市的名称 private String mCurrentDistrictName = "";//当前区的名称 public DialogAreaChose(Context context, AreaChoseListener areaChoseListener) { super(context); this.context = context; this.areaChoseListener = areaChoseListener; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.dialog_area_chose); Window window = getWindow(); if (window != null) { window.setGravity(Gravity.BOTTOM);//设置Dialog在底部显示 window.setBackgroundDrawableResource(android.R.color.transparent);//设置背景透明 window.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT);//设置横向全屏 window.setWindowAnimations(R.style.dialog_share); } initProvinceDatas();//初始化地区信息 init();//初始化 } private void init() { TextView tvBack = (TextView) findViewById(R.id.area_chose_cancel); TextView tvFinish = (TextView) findViewById(R.id.area_chose_finish); scrollProvince = (PickerScrollView) findViewById(R.id.area_chose_province); scrollCity = (PickerScrollView) findViewById(R.id.area_chose_city); scrollDistrict = (PickerScrollView) findViewById(R.id.area_chose_district); scrollProvince.setViewAdapter(new ArrayWheelAdapter<>( context, mProvinceDatas)); // 设置可见条目数量 scrollProvince.setVisibleItems(5); scrollCity.setVisibleItems(5); scrollDistrict.setVisibleItems(5); updateCities(); updateAreas(); scrollProvince.addScrollingListener(this); scrollCity.addScrollingListener(this); scrollDistrict.addScrollingListener(this); tvBack.setOnClickListener(this); tvFinish.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.area_chose_cancel: //取消 this.dismiss(); break; case R.id.area_chose_finish: //完成 areaChoseListener.onClick(mCurrentProviceName, mCurrentCityName, mCurrentDistrictName); this.dismiss(); break; } } //解析区域XMl文件 private void initProvinceDatas() { List<ProvinceModel> provinceList; AssetManager asset = context.getAssets(); try { InputStream input = asset.open("area_data.xml"); // 创建一个解析xml的工厂对象 SAXParserFactory spf = SAXParserFactory.newInstance(); // 解析xml SAXParser parser = spf.newSAXParser(); XmlParserHandler handler = new XmlParserHandler(); parser.parse(input, handler); input.close(); // 获取解析出来的数据 provinceList = handler.getDataList(); //*/ 初始化默认选中的省、市、区 if (provinceList != null && !provinceList.isEmpty()) { mCurrentProviceName = provinceList.get(0).getName(); List<CityModel> cityList = provinceList.get(0).getCityList(); if (cityList != null && !cityList.isEmpty()) { mCurrentCityName = cityList.get(0).getName(); List<DistrictModel> districtList = cityList.get(0).getDistrictList(); mCurrentDistrictName = districtList.get(0).getName(); } } if (provinceList != null) { mProvinceDatas = new String[provinceList.size()]; for (int i = 0; i < provinceList.size(); i++) { // 遍历所有省的数据 mProvinceDatas[i] = provinceList.get(i).getName(); Log.v("lgq","所以省。。。。。。"+mProvinceDatas[i]+i); List<CityModel> cityList = provinceList.get(i).getCityList(); String[] cityNames = new String[cityList.size()]; for (int j = 0; j < cityList.size(); j++) { // 遍历省下面的所有市的数据 cityNames[j] = cityList.get(j).getName(); List<DistrictModel> districtList = cityList.get(j).getDistrictList(); String[] distrinctNameArray = new String[districtList.size()];// DistrictModel[] distrinctArray = new DistrictModel[districtList.size()]; for (int k = 0; k < districtList.size(); k++) { // 遍历市下面所有区/县的数据 DistrictModel districtModel = new DistrictModel(districtList.get(k).getName(), districtList.get(k).getZipcode()); // 区/县对于的邮编,保存到mZipcodeDatasMap// distrinctArray[k] = districtModel; distrinctNameArray[k] = districtModel.getName(); } // 市-区/县的数据,保存到mDistrictDatasMap mDistrictDatasMap.put(cityNames[j], distrinctNameArray); } // 省-市的数据,保存到mCitisDatasMap mCitisDatasMap.put(provinceList.get(i).getName(), cityNames); } } } catch (Throwable e) { e.printStackTrace(); } } /** * 根据当前的市,更新区WheelView的信息 */ private void updateAreas() { int pCurrent = scrollCity.getCurrentItem(); mCurrentCityName = mCitisDatasMap.get(mCurrentProviceName)[pCurrent]; String[] areas = mDistrictDatasMap.get(mCurrentCityName); if (areas == null) { areas = new String[]{""}; } scrollDistrict .setViewAdapter(new ArrayWheelAdapter<>(context, areas)); scrollDistrict.setCurrentItem(0); } /** * 根据当前的省,更新市WheelView的信息 */ private void updateCities() { int pCurrent = scrollProvince.getCurrentItem(); mCurrentProviceName = mProvinceDatas[pCurrent]; String[] cities = mCitisDatasMap.get(mCurrentProviceName); if (cities == null) { cities = new String[]{""}; } scrollCity.setViewAdapter(new ArrayWheelAdapter<>(context, cities)); scrollCity.setCurrentItem(0); updateAreas(); } @Override public void onScrollingStarted(PickerScrollView wheel) { } @Override public void onScrollingFinished(PickerScrollView wheel) { if (wheel == scrollProvince) { updateCities(); } else if (wheel == scrollCity) { updateAreas(); } else if (wheel == scrollDistrict) { mCurrentDistrictName = mDistrictDatasMap.get(mCurrentCityName)[wheel .getCurrentItem()]; } } public interface AreaChoseListener { void onClick(String privince, String city, String district); }}添加 area_date.xml 到asset
<root> <province name="安徽省"> <city name="安庆市"> <district name="枞阳县" zipcode="246000" /> <district name="大观区" zipcode="246000" /> <district name="怀宁县" zipcode="246000" /> <district name="潜山县" zipcode="246000" /> <district name="宿松县" zipcode="246000" /> <district name="太湖县" zipcode="246000" /> <district name="桐城市" zipcode="246000" /> <district name="望江县" zipcode="246000" /> <district name="宜秀区" zipcode="246000" /> <district name="迎江区" zipcode="246000" /> <district name="岳西县" zipcode="246000" /> <district name="其他" zipcode="246000" /> </city> <city name="蚌埠市"> <district name="蚌山区" zipcode="233000" /> <district name="固镇县" zipcode="233000" /> <district name="怀远县" zipcode="233000" /> <district name="淮上区" zipcode="233000" /> <district name="龙子湖区" zipcode="233000" /> <district name="五河县" zipcode="233000" /> <district name="禹会区" zipcode="233000" /> <district name="其他" zipcode="233000" /> </city> <city name="亳州市"> <district name="利辛县" zipcode="236000" /> <district name="蒙城县" zipcode="236000" /> <district name="谯城区" zipcode="236000" /> <district name="涡阳县" zipcode="236000" /> <district name="其他" zipcode="236000" /> </city> <city name="巢湖市"> <district name="含山县" zipcode="238000" /> <district name="和县" zipcode="238000" /> <district name="居巢区" zipcode="238000" /> <district name="庐江县" zipcode="238000" /> <district name="无为县" zipcode="238000" /> <district name="其他" zipcode="238000" /> </city> <city name="池州市"> <district name="东至县" zipcode="247100" /> <district name="贵池区" zipcode="247100" /> <district name="青阳县" zipcode="247100" /> <district name="石台县" zipcode="247100" /> <district name="其他" zipcode="247100" /> </city>
demo 下载地址 http://pan.baidu.com/s/1gf9psRL
eclipse 下载地址 http://pan.baidu.com/s/1clJePK
阅读全文
0 0
- android 省市区选择器
- Android仿京东地址省市区选择器
- 省市区选择器
- Android 地址选择器,实现省市区三级联动
- Android 地址选择器,实现省市区三级联动
- 省市区三级下拉选择器
- 省市区级联选择器 -TypeScript
- 简化后的省市区选择器
- Android省市区一,二,三联滚动选择器(使用Dialog样式的Activity实现)
- IOS下省市区选择器实现[基于TableView]
- Android_全国省市区-三级联动 时间选择器
- 一秒集成省市区三级联动选择器
- 移动端省市区三级联动选择器
- React Native 省市区地址选择器(仿京东)
- wheelview 省市区android
- Android 省市区三级联动
- android 省市区三级联动
- Android-省市区三级联动
- spring aop的五种通知类型
- 【代码笔记】iOS-MBProgressHUD
- js取不到input的值
- IPV6网络管理
- win32(1)--基础
- android 省市区选择器
- Dubbo入门及简介
- leetcode Roman& Integer
- How do you specify a byte literal in Java?
- Target runtime com.genuitec.runtime.generic.jee60 is not defined
- iOS 10.3 新特性 app评分 SKStoreReviewController swift
- 马云的菜鸟物流“小目标”
- VC++ K-Means 图像二值化
- 对主流框架OKHttp的封装,达到一行代码实现一个业务逻辑