需求就是地区选择可以弹出来,因为百度地图一般是获取当前的地址,我们需要的是他的家庭地址  所以才有了三级Spinner解决

地区问题  就是当用户填写了之后,下次再修改,你要给他显示出来上次填写的值,由于是联动的比较麻烦

首先是要搞定地区的问题,一般是用array来设置  这里面我只贴一部分

    <!-- 含个省、自治区、直辖市 --><string-array name="province_item"><item>不限地区</item><item>北京</item><item>天津</item><item>河北</item><item>山西</item><item>内蒙古</item><item>辽宁</item><item>吉林</item><item>黑龙江</item><item>上海</item><item>江苏</item><item>浙江</item><item>安徽</item><item>福建</item><item>江西</item><item>山东</item><item>河南</item><item>湖北</item><item>湖南</item><item>广东</item><item>广西</item><item>海南</item><item>重庆</item><item>四川</item><item>贵州</item><item>云南</item><item>西藏</item><item>陕西</item><item>甘肃</item><item>青海</item><item>宁夏</item><item>新疆</item></string-array><!-- 个地级市 --><string-array name="unlimited_province_item"><item>不限地区</item></string-array><string-array name="beijin_province_item"><item>北京</item></string-array><string-array name="tianjin_province_item"><item>天津</item></string-array><string-array name="heibei_province_item"><item>石家庄</item><item>唐山</item><item>秦皇岛</item><item>邯郸</item><item>邢台</item><item>保定</item><item>张家口</item><item>承德</item>

然后把这个东西搞成一个类来装

public class ResourceData {public static final int[] city = { R.array.beijin_province_item, R.array.tianjin_province_item, R.array.heibei_province_item,R.array.shanxi1_province_item, R.array.neimenggu_province_item, R.array.liaoning_province_item,R.array.jilin_province_item, R.array.heilongjiang_province_item, R.array.shanghai_province_item,R.array.jiangsu_province_item, R.array.zhejiang_province_item, R.array.anhui_province_item,R.array.fujian_province_item, R.array.jiangxi_province_item, R.array.shandong_province_item,R.array.henan_province_item, R.array.hubei_province_item, R.array.hunan_province_item,R.array.guangdong_province_item, R.array.guangxi_province_item, R.array.hainan_province_item,R.array.chongqing_province_item, R.array.sichuan_province_item, R.array.guizhou_province_item,R.array.yunnan_province_item, R.array.xizang_province_item, R.array.shanxi2_province_item,R.array.gansu_province_item, R.array.qinghai_province_item, R.array.linxia_province_item,R.array.xinjiang_province_item };
}

这里面只写一部分了  多个地级市,县城你自己加吧

接下来就是代码中搞定了:

要准备一个函数:

 private void select(Spinner spin, ArrayAdapter<CharSequence> adapter, int arry,int position) {adapter = ArrayAdapter.createFromResource(context, arry, R.drawable.drop_list_hover);adapter.setDropDownViewResource(R.drawable.drop_list_ys);spin.setAdapter(adapter);spin.setSelection(position, true);}

这个函数的功能就是给一个 Spinner进行初始化把,参数分别是Spinner对象,适配器,数据集,默认位置

因为在设置联动的时候都是根据上一个Spinner选择的值 id来决定下一个Spinner的值

接下来就先贴代码了

 private void loadAddsSpinner() {province_spinner = (Spinner) findViewById(R.id.province_spinner);province_spinner.setPrompt("请选择省份");province_adapter = ArrayAdapter.createFromResource(context, R.array.province_item,R.drawable.drop_list_hover);province_adapter.setDropDownViewResource(R.drawable.drop_list_ys);province_spinner.setAdapter(province_adapter);province_spinner.setOnItemSelectedListener(new OnItemSelectedListener() {@Overridepublic void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) {provinceId = province_spinner.getSelectedItemPosition();strProvince = province_spinner.getSelectedItem().toString();city_spinner = (Spinner) findViewById(R.id.city_spinner);if (true) {Log.v("test", "province: " + province_spinner.getSelectedItem().toString() + provinceId.toString());county_spinner = (Spinner) findViewById(R.id.county_spinner);city_spinner = (Spinner) findViewById(R.id.city_spinner);city_spinner.setPrompt("请选择城市");select(city_spinner, city_adapter, ResourceData.city[provinceId],sposition);city_spinner.setOnItemSelectedListener(new OnItemSelectedListener() {@Overridepublic void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) {cityId = city_spinner.getSelectedItemPosition();strCity = city_spinner.getSelectedItem().toString();Log.v("test", "city: " + city_spinner.getSelectedItem().toString() + cityId.toString());if (true) {county_spinner = (Spinner) findViewById(R.id.county_spinner);county_spinner.setPrompt("请选择县区");switch (provinceId) {case 0:select(county_spinner, county_adapter, ResourceData.countyOfBeiJing[cityId],xianposition);break;case 1:select(county_spinner, county_adapter, ResourceData.countyOfTianJing[cityId],xianposition);break;case 2:select(county_spinner, county_adapter, ResourceData.countyOfHeBei[cityId],xianposition);break;case 3:select(county_spinner, county_adapter, ResourceData.countyOfShanXi1[cityId],xianposition);break;case 4:select(county_spinner, county_adapter, ResourceData.countyOfNeiMengGu[cityId],xianposition);break;case 5:select(county_spinner, county_adapter, ResourceData.countyOfLiaoNing[cityId],xianposition);break;case 6:select(county_spinner, county_adapter, ResourceData.countyOfJiLin[cityId],xianposition);break;case 7:select(county_spinner, county_adapter, ResourceData.countyOfHeiLongJiang[cityId],xianposition);break;case 8:select(county_spinner, county_adapter, ResourceData.countyOfShangHai[cityId],xianposition);break;case 9:select(county_spinner, county_adapter, ResourceData.countyOfJiangSu[cityId],xianposition);break;case 10:select(county_spinner, county_adapter, ResourceData.countyOfZheJiang[cityId],xianposition);break;case 11:select(county_spinner, county_adapter, ResourceData.countyOfAnHui[cityId],xianposition);break;case 12:select(county_spinner, county_adapter, ResourceData.countyOfFuJian[cityId],xianposition);break;case 13:select(county_spinner, county_adapter, ResourceData.countyOfJiangXi[cityId],xianposition);break;case 14:select(county_spinner, county_adapter, ResourceData.countyOfShanDong[cityId],xianposition);break;case 15:select(county_spinner, county_adapter, ResourceData.countyOfHeNan[cityId],xianposition);break;case 16:select(county_spinner, county_adapter, ResourceData.countyOfHuBei[cityId],xianposition);break;case 17:select(county_spinner, county_adapter, ResourceData.countyOfHuNan[cityId],xianposition);break;case 18:select(county_spinner, county_adapter, ResourceData.countyOfGuangDong[cityId],xianposition);break;case 19:select(county_spinner, county_adapter, ResourceData.countyOfGuangXi[cityId],xianposition);break;case 20:select(county_spinner, county_adapter, ResourceData.countyOfHaiNan[cityId],xianposition);break;case 21:select(county_spinner, county_adapter, ResourceData.countyOfChongQing[cityId],xianposition);break;case 22:select(county_spinner, county_adapter, ResourceData.countyOfSiChuan[cityId],xianposition);break;case 23:select(county_spinner, county_adapter, ResourceData.countyOfGuiZhou[cityId],xianposition);break;case 24:select(county_spinner, county_adapter, ResourceData.countyOfYunNan[cityId],xianposition);break;case 25:select(county_spinner, county_adapter, ResourceData.countyOfXiZang[cityId],xianposition);break;case 26:select(county_spinner, county_adapter, ResourceData.countyOfShanXi2[cityId],xianposition);break;case 27:select(county_spinner, county_adapter, ResourceData.countyOfGanSu[cityId],xianposition);break;case 28:select(county_spinner, county_adapter, ResourceData.countyOfQingHai[cityId],xianposition);break;case 29:select(county_spinner, county_adapter, ResourceData.countyOfNingXia[cityId],xianposition);break;case 30:select(county_spinner, county_adapter, ResourceData.countyOfXinJiang[cityId],xianposition);default:break;}county_spinner.setOnItemSelectedListener(new OnItemSelectedListener() {@Overridepublic void onItemSelected(AdapterView<?> arg0, View arg1, int arg2, long arg3) {strCounty = county_spinner.getSelectedItem().toString();if (strProvince.equals(strCity)) {xiangxiadd.setText(strProvince + strCounty);region = strProvince + "," + strCounty;xiangxiaddress = region +","+xiangxiaddress;//详细地址加上前缀} else {xiangxiadd.setText(strProvince + strCity + strCounty);region = strProvince + "," + strCity + "," + strCounty;xiangxiaddress = region +","+xiangxiaddress;//详细地址加上前缀}}@Overridepublic void onNothingSelected(AdapterView<?> arg0) {}});}}@Overridepublic void onNothingSelected(AdapterView<?> arg0) {// TODO Auto-generated method stub}});}}@Overridepublic void onNothingSelected(AdapterView<?> arg0) {}});}

这里面最重要的就是select代码了  注意最后一个参数的作用  position  他就是用来设置默认值的

后面就简单了,分析从服务器中返回的数据,判断是哪个id   变成position就好了

我的是这样做的,可能还有人更坚定,我感觉我的稍显负责

                         //省市县String ssxStr = element.optString("ind_origin2");if(ssxStr!=null || ssxStr !="" || ssxStr!="null"){String[] ss = ssxStr.split(",");Log.i("Wusheng", ss.length+"-----322125");if(ss.length == 2){province_spinner.setSelection(initProSpinner(ss[0]), true);int proInt = initProSpinner(ss[0]);int cityInt = initCitySpinner(proInt,ss[0]);sposition = cityInt;provinceId = proInt;cityId = cityInt;int xianInt = initCountSpinner(proInt,sposition,ss[1]);xianposition = xianInt;//Log.i("Wusheng",ResourceData.city[initProSpinner(ss[0])]);}else if(ss.length == 3){Log.i("Wusheng", initProSpinner(ss[0])+"322125");province_spinner.setSelection(initProSpinner(ss[0]), true);int proInt = initProSpinner(ss[0]);int cityInt = initCitySpinner(proInt,ss[1]);sposition = cityInt;provinceId = proInt;cityId = cityInt;//接下来通过省,市的代码去找到县的代码int xianInt = initCountSpinner(proInt,sposition,ss[2]);Log.i("Wusheng",xianInt+"-----44---322125");xianposition = xianInt;}                           }

这里面是异步进程handler里面的处理省 市县的代码  为什么切分之后分为两种呢,因为我们有北京  重庆这样的特殊省份

根据省的名称返回省的代码:

 /*** 根据省名称返回  下标值* @param proStr* @return*/public int initProSpinner(String proStr){String[] pros=this.getResources().getStringArray(R.array.province_item);for(int i=0;i<pros.length;i++){if(proStr.equals(pros[i])){return i;}}return 0;}

看客不要太在意我定义了那么多int变量啊,因为怕写错了,所以分的比较清楚,后面的很多int都去掉了,

 /*** 根据省代码 来获取 市的代码* @param proInt* @param string* @return*/public int initCitySpinner(int proInt, String citStr) {// TODO Auto-generated method stubString[] citys=this.getResources().getStringArray(ResourceData.city[proInt]);for(int i=0;i<citys.length;i++){if(citStr.equals(citys[i])){return i;}}return 0;}

根据省代码去获取 市的代码,你可能会认为,为什么上面不根据名称直接去获取市的代码,那你想多了,你可以看看我的根据array构造数组的时候怎么调用id值的

 /*** 根据省 市代码 来获取 县的代码* @param sposition2* @param string* @return*/public int initCountSpinner(int proint,int sposition2, String countStr) {// TODO Auto-generated method stubString[] citys= null;switch (proint) {case 0:citys = this.getResources().getStringArray(ResourceData.countyOfBeiJing[sposition2]);break;case 1:citys = this.getResources().getStringArray(ResourceData.countyOfTianJing[sposition2]);break;case 2:citys = this.getResources().getStringArray(ResourceData.countyOfHeBei[sposition2]);break;case 3:citys = this.getResources().getStringArray(ResourceData.countyOfShanXi1[sposition2]);break;case 4:citys = this.getResources().getStringArray(ResourceData.countyOfNeiMengGu[sposition2]);break;case 5:citys = this.getResources().getStringArray(ResourceData.countyOfLiaoNing[sposition2]);break;case 6:citys = this.getResources().getStringArray(ResourceData.countyOfJiLin[sposition2]);break;case 7:citys = this.getResources().getStringArray(ResourceData.countyOfHeiLongJiang[sposition2]);break;case 8:citys = this.getResources().getStringArray(ResourceData.countyOfShangHai[sposition2]);break;case 9:citys = this.getResources().getStringArray(ResourceData.countyOfJiangSu[sposition2]);break;case 10:citys = this.getResources().getStringArray(ResourceData.countyOfZheJiang[sposition2]);break;case 11:citys = this.getResources().getStringArray(ResourceData.countyOfAnHui[sposition2]);break;case 12:citys = this.getResources().getStringArray(ResourceData.countyOfFuJian[sposition2]);break;case 13:citys = this.getResources().getStringArray(ResourceData.countyOfJiangXi[sposition2]);break;case 14:citys = this.getResources().getStringArray(ResourceData.countyOfShanDong[sposition2]);break;case 15:citys = this.getResources().getStringArray(ResourceData.countyOfHeNan[sposition2]);break;case 16:citys = this.getResources().getStringArray(ResourceData.countyOfHuBei[sposition2]);break;case 17:citys = this.getResources().getStringArray(ResourceData.countyOfHuNan[sposition2]);break;case 18:citys = this.getResources().getStringArray(ResourceData.countyOfGuangDong[sposition2]);break;case 19:citys = this.getResources().getStringArray(ResourceData.countyOfGuangXi[sposition2]);break;case 20:citys = this.getResources().getStringArray(ResourceData.countyOfHaiNan[sposition2]);break;case 21:citys = this.getResources().getStringArray(ResourceData.countyOfChongQing[sposition2]);break;case 22:citys = this.getResources().getStringArray(ResourceData.countyOfSiChuan[sposition2]);break;case 23:citys = this.getResources().getStringArray(ResourceData.countyOfGuiZhou[sposition2]);break;case 24:citys = this.getResources().getStringArray(ResourceData.countyOfYunNan[sposition2]);break;case 25:citys = this.getResources().getStringArray(ResourceData.countyOfXiZang[sposition2]);break;case 26:citys = this.getResources().getStringArray(ResourceData.countyOfShanXi2[sposition2]);break;case 27:citys = this.getResources().getStringArray(ResourceData.countyOfGanSu[sposition2]);break;case 28:citys = this.getResources().getStringArray(ResourceData.countyOfQingHai[sposition2]);break;case 29:citys = this.getResources().getStringArray(ResourceData.countyOfNingXia[sposition2]);break;case 30:citys = this.getResources().getStringArray(ResourceData.countyOfXinJiang[sposition2]);default:break;}for(int i=0;i<citys.length;i++){if(countStr.equals(citys[i])){return i;}}return 0;}

这个地方就稍微县的臃肿了,那位看客又更好的方法没有,中国低级县区太多了,至少有2800个左右吧,我也想不出来怎么用代码更好的找到每个县的代码

到此基本就完成了认为,运行下就解决了问题

其中解析那里用的是  当前类的私有变量   不用多说了

android在代码中利用Spinner控件设置联动地区的解决办法相关推荐

  1. PPT中《此演示文稿中的一些控件无法激活》的解决办法

    http://apps.hi.baidu.com/share/detail/6016136 PPT中<此演示文稿中的一些控件无法激活>的解决办法 在PPT做课件,在其中插入Flash动画, ...

  2. ASP中利用OWC控件实现图表功能详解[zz]

    ASP中利用OWC控件实现图表功能详解 在ASP中利用OWC(Office Web Components)控件可轻松实现各种图表功能,如饼图,簇状柱型图,折线图等. 在下面的代码中我详细的给出了饼图, ...

  3. VB.net小技巧——VB中利用TreeView控件和Box控件做知识备忘

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 VB.net小技巧--VB中利用TreeView控件和Box控件做知识备忘 这里不涉及代码的展示,主要是为了阐述一种做笔记的思想. 为 ...

  4. ASP中利用OWC控件实现图表功能详解

    在ASP中利用OWC(Office Web Components)控件可轻松实现各种图表功能,如饼图,簇状柱型图,折线图等. 在下面的代码中我详细的给出了饼图,簇状柱型图,折线图的使用方法.OWC的更 ...

  5. VS2008 在IE8中 调试 ActiveX控件 无法进入断点的解决方法 设置VS2008和IE8 调试ATL MFC ActiveX控件

    VS2008 在IE8中 调试 ActiveX控件 无法进入断点的解决方法 设置VS2008和IE8 调试ATL MFC ActiveX控件 参考文章: (1)VS2008 在IE8中 调试 Acti ...

  6. C#中引用第三方ocx控件引发的问题以及解决办法

    C#中引用第三方ocx控件引发的问题以及解决办法 参考文章: (1)C#中引用第三方ocx控件引发的问题以及解决办法 (2)https://www.cnblogs.com/XuPengLB/p/759 ...

  7. 对于引用的控件被拒绝访问的解决办法的补充(续)

    在上个月,我曾经写过"对于引用的控件被拒绝访问的解决办法的补充", 见http://liuyuer.cnblogs.com/archive/2005/10/12/253063.ht ...

  8. excel日历弄到html,如何在Excel中利用日历控件来快速输入日期

    给大家分享了一个利用日历控件在Excel单元格中输入日期的小窍门.大家知道,物流和会计行业的报表,经常需要手工输入一些日期,例如发货日期,在途时间.到达配送中心日期.签收日期等,如果手工输入,难免出错 ...

  9. android控件位置居中,Android 的布局中如何使控件居中

    首先要分两种不同情况,在两种不同的布局方式下:LinearLayout 和RelativeLayout 1. LinearLayout a). android:layout_gravity=" ...

最新文章

  1. pytorch BiLSTM+CRF代码详解 重点
  2. E: 无法获得锁 /var/lib/apt/lists/lock - open (11: 资源暂时不可用) E: 无法对目录 /var/lib/apt/lists/ 加锁 问题解决方法...
  3. java程序员被误导的一个概念,Set也可以有序
  4. python webdriver save_Python + Selenium +Chrome 批量下载网页代码修改【新手必学】
  5. (转)基于MVC4+EasyUI的Web开发框架经验总结(2)- 使用EasyUI的树控件构建Web界面...
  6. 产业链人士:苹果明年将推出OLED屏iPad
  7. 如何设置VSCode中文显示
  8. C++设计模式之Template Method(模板方法模式)
  9. Open browser failed!! Please check if you have installed the browser correct
  10. SPSS调节效应分析插件 v1.1.1
  11. 最新行政区划代码省市区数据库-行政区域查询API
  12. win10微信卡顿_终于找到Win10卡顿病根了!看完秒懂
  13. 善领dsa2020最新车机ce版_科技测丨需要在车机和手机中“二选一”的凯迪拉克
  14. python里随机生成属性_Python随机生成信用卡卡号的实现方法
  15. Beaglebone Black– 智能家居控制系统 LAS - 刷 WiFi 模块 ESP8266 Firmware 和 ESP8266 直接收发 GPIO 信号...
  16. 在线编译器汇总|2020年最新版
  17. Image Matching:SuperGlue论文阅读笔记
  18. 前缀和以及哈希表优化
  19. 编程之美--1的数目
  20. 联想计算机phoenix award bios,BIOS设置图解教程(AWARD,AMI和PHOENIX)

热门文章

  1. webgl_图形变换(旋转,平移,缩放)
  2. 粒径测量中的D10 D50 D90的含义
  3. 什么是计算机立体化教程,全国计算机等级考试立体化应试教程
  4. 陷波器的离散化及仿真验证
  5. Win10下不能识别Android的MTP模式
  6. php后台发布微信小程序
  7. windows_关闭windows休眠功能
  8. 某银行存储瘫痪、缺失6个小时数据,只能人工补录
  9. 淘宝/天猫关键词搜索最新接口
  10. CRC16 校验算法