Android省市区三级联动
来源:互联网 发布:平价淘宝女装 知乎 编辑:程序博客网 时间:2024/05/22 03:01
1. 首先非常感谢鸿洋,大神是CSDN上我非常敬仰开发工程师。我是在大神提供的demo基础上稍稍改动一下就达到我自己想要的效果
2. 我的省市区实现的是能够动态修改自定义控件的数据,非常简单就是你需要什么信息传递什么信息,数据就能改动,直接拷贝到自己的项目中就能用
3. 部分关键代码,完整的代码自行下载使用
1) 解析json数据
private void initJsonData1() {try {StringBuffer sb = new StringBuffer();InputStream is = getAssets().open("area.json");int len = -1;byte[] buf = new byte[1024];while ((len = is.read(buf)) != -1) {sb.append(new String(buf, 0, len, "utf-8"));}is.close();mJsonObj1 = new JSONArray(sb.toString());} catch (IOException e) {e.printStackTrace();} catch (JSONException e) {e.printStackTrace();}}
2) 加载解析的省市区数据
private void initJson() {try {for (int i = 0; i < mJsonObj1.length(); i++) {JSONObject jsonP = mJsonObj1.getJSONObject(i);// 每个省的json对象String province = jsonP.getString("name");String cityList = jsonP.getString("cityList");// Log.i("province", province);provinceshuzu.add(province);array1 = (String[]) provinceshuzu.toArray(new String[provinceshuzu.size()]);// Log.i("provinceshuzu1", ""+Arrays.asList(array1));JSONArray array = new JSONArray(cityList);for (int k = 0; k < array.length(); k++) {JSONObject jsonC = array.getJSONObject(k);// 每个省的json对象city = jsonC.getString("name");areaList = jsonC.getString("areaList");name = areaList.substring(1, areaList.length() - 1);name1 = name.replace("\"", "");name2 = name1.replace("\",", ",");name3 = name2.split(",");// Log.i("5555559999", ""+Arrays.asList(name3));if (province.equals("北京")) {cityshuzu.add("京" + city);mAreaDatasMap1.put("京" + city, name3);} else if (province.equals("天津")) {cityshuzu.add("津" + city);mAreaDatasMap1.put("津" + city, name3);} else if (province.equals("上海")) {cityshuzu.add("沪" + city);mAreaDatasMap1.put("沪" + city, name3);} else {cityshuzu.add(city);mAreaDatasMap1.put(city, name3);}array2 = (String[]) cityshuzu.toArray(new String[cityshuzu.size()]);// Log.i("9999", ""+Arrays.asList(array2));}cityshuzu.clear();mCitisDatasMap1.put(province, array2);}} catch (Exception e) {}mJsonObj1 = null;}
3) 根据当前的省更新市
private void updateCities() {int pCurrent = mProvince.getCurrentItem();mCurrentProviceName = array1[pCurrent];String[] cities = mCitisDatasMap1.get(mCurrentProviceName);if (cities == null) {cities = new String[] { "" };}Log.i("777771111111", "" + mCurrentProviceName);Log.i("77777", "" + Arrays.asList(cities));mCity.setViewAdapter(new ArrayWheelAdapter<String>(this, cities));mCity.setCurrentItem(0);updateAreas();}
4) 根据当前的市更新相应的区
private void updateAreas() {int pCurrent = mCity.getCurrentItem();mCurrentCityName = mCitisDatasMap1.get(mCurrentProviceName)[pCurrent];Log.i("5555555555", "--" + mCurrentCityName);Log.i("5555555555", "--" + mCitisDatasMap1.get(mCurrentProviceName)[pCurrent]);String[] areas = mAreaDatasMap1.get(mCurrentCityName);if (areas == null) {areas = new String[] { "" };}Log.i("6666666666", "" + Arrays.asList(areas));mArea.setViewAdapter(new ArrayWheelAdapter<String>(this, areas));mArea.setCurrentItem(0);}
5) 联动效果的实现代码
@Overridepublic void onChanged(WheelView wheel, int oldValue, int newValue) {if (wheel == mProvince) {Log.i("4444444444444444", "8888888888888");updateCities();if (mAreaDatasMap1 != null && mAreaDatasMap1.get(mCurrentCityName) != null) {mCurrentAreaName = mAreaDatasMap1.get(mCurrentCityName)[0];} else {mCurrentAreaName = "";}} else if (wheel == mCity) {updateAreas();// 地区if (mAreaDatasMap1 != null && mAreaDatasMap1.get(mCurrentCityName) != null) {mCurrentAreaName = mAreaDatasMap1.get(mCurrentCityName)[0];} else {mCurrentAreaName = "";}} else if (wheel == mArea) {mCurrentAreaName = mAreaDatasMap1.get(mCurrentCityName)[newValue];if (mAreaDatasMap1 != null && mAreaDatasMap1.get(mCurrentCityName) != null) {mCurrentAreaName = mAreaDatasMap1.get(mCurrentCityName)[newValue];} else {mCurrentAreaName = "";}}}
6) 动态更新省市区的代码
private void changeSheng(String sheng) {Log.i("sheng", sheng);for (int i = 0; i < array1.length; i++) {if (array1[i].equals(sheng)) {mProvince.setCurrentItem(i);Log.i("sheng", array1[i]);}}}private void changeShi(String shi) {Log.i("shi", shi);int pCurrent = mProvince.getCurrentItem();mCurrentProviceName = array1[pCurrent];String[] cities = mCitisDatasMap1.get(mCurrentProviceName);if (cities == null) {cities = new String[] { "" };}for (int i = 0; i < cities.length; i++) {if (cities[i].equals(shi)) {mCity.setCurrentItem(i);Log.i("shi1111111", cities[i]);}}}private void changeQu(String qu) {Log.i("qu", qu);int pCurrent = mCity.getCurrentItem();mCurrentCityName = mCitisDatasMap1.get(mCurrentProviceName)[pCurrent];String[] areas = mAreaDatasMap1.get(mCurrentCityName);if (areas == null) {areas = new String[] { "" };}for (int i = 0; i < areas.length; i++) {if (areas[i].equals(qu)) {mArea.setCurrentItem(i);Log.i("qu111111", areas[i]);}}}
6. 如需修改代码只需要改动以下内容
1) 根据json数据的不同自行解析自己的json数据就行,相信大家对于解析json很擅长。
2) 乱码的问题:用editplus重新编码json文件,然后将代码中解码也改成utf-8在试一下。
代码下载地址点击打开链接
2 0
- Android 省市区三级联动
- android 省市区三级联动
- Android-省市区三级联动
- Android省市区三级联动
- android 省市区三级联动
- android 省市区选择三级联动
- Android省市区三级联动控件
- Android之省市区三级联动
- android省市区三级联动实现
- Android--Spinner实现省市区三级联动
- Android 地址选择器,实现省市区三级联动
- Android省市区三级联动滚轮选择
- Android(省市区三级联动Dialog)Demo
- Android实现省市区三级联动效果
- Android省市区三级联动的实现
- Android 地址选择器,实现省市区三级联动
- Android开发之实现省市区三级联动
- Android省市区三级联动和地区定位
- 代 码 O v e r l a y 机 制
- cat more less查看日志
- MAC如何生成SSH key
- ubuntu 配置 turnserver
- 199. Binary Tree Right Side View
- Android省市区三级联动
- Oracle 数据块损坏与恢复详解
- android添加超级管理权限
- vim 突然不响应了
- java基础笔记.集合.map.初识
- 500、【练习题】Keyboard Row
- oracle关键字
- split函数分割字符串
- iOS字符串比较(区分与不区分大小写比较)