android注册用户地址实现省市区下拉框联动
2015-07-26 00:29
686 查看
<span style="font-size:18px;">要想实现省市区三联动首先要有 省市区的xml资源我用的是android studio,我把下载好的资源放到了res下新建的一个叫xml的文件夹中位置:</span>
<span style="font-size:18px;">用pull方式解析xml资源:</span>
<span style="font-size:18px;">//解析省</span>
<span style="background-color: rgb(255, 255, 255); font-family: 'Microsoft YaHei', SimSun, Verdana, Arial, Helvetica, sans-serif;"></span><pre name="code" class="java"> public void Getprovince(){ XmlResourceParser xrp=getResources().getXml(R.xml.provinces);//获取res下xml中的provinces.xml资源 try{ while(xrp.getEventType()!=XmlResourceParser.END_DOCUMENT){ if(xrp.getEventType()==XmlResourceParser.START_TAG){ String name=xrp.getName(); if(name.equals("Province")){ province.add(xrp.getAttributeValue(1)); }else if(xrp.getEventType()==XmlResourceParser.END_TAG){ }else if(xrp.getEventType()==XmlResourceParser.TEXT){ } } xrp.next(); } }catch(XmlPullParserException e){ e.printStackTrace(); }catch(IOException e){ e.printStackTrace(); } }
//解析市
<pre name="code" class="java">public void Getcity(){ String flag="1"; String flag1="1"; XmlResourceParser xrp=getResources().getXml(R.xml.cities);<span style="font-family: 'Microsoft YaHei', SimSun, Verdana, Arial, Helvetica, sans-serif;">//获取res下xml中的citys.xml资源</span> try{ List city=new ArrayList(); List id=new ArrayList(); while(xrp.getEventType()!=XmlResourceParser.END_DOCUMENT){ if(xrp.getEventType()==XmlResourceParser.START_TAG){ String name=xrp.getName(); if(name.equals("City")){ if(!flag1.equals(xrp.getAttributeValue(2))){ ID.put(flag1,id); id=new ArrayList(); flag1=xrp.getAttributeValue(2); } id.add(xrp.getAttributeValue(0)); if(!flag.equals(xrp.getAttributeValue(2))){ City.put(flag,city); city=new ArrayList(); flag=xrp.getAttributeValue(2); } city.add(xrp.getAttributeValue(1)); }else if(xrp.getEventType()==XmlResourceParser.END_TAG){ }else if(xrp.getEventType()==XmlResourceParser.TEXT){ } } xrp.next(); } }catch(XmlPullParserException e){ e.printStackTrace(); }catch(IOException e){ e.printStackTrace(); } }//解析区
<pre name="code" class="java">public void Getdistric(){ String flag="1"; XmlResourceParser xrp=getResources().getXml(R.xml.districts);<span style="font-family: 'Microsoft YaHei', SimSun, Verdana, Arial, Helvetica, sans-serif;">//获取res下xml中的districts.xml资源</span> try{ List district=new ArrayList(); while(xrp.getEventType()!=XmlResourceParser.END_DOCUMENT){ if(xrp.getEventType()==XmlResourceParser.START_TAG){ String name=xrp.getName(); if(name.equals("District")){ if(!flag.equals(xrp.getAttributeValue(2))){ Distric.put(flag,district); district=new ArrayList(); flag=xrp.getAttributeValue(2); } district.add(xrp.getAttributeValue(1)); }else if(xrp.getEventType()==XmlResourceParser.END_TAG){ }else if(xrp.getEventType()==XmlResourceParser.TEXT){ } } xrp.next(); } }catch(XmlPullParserException e){ e.printStackTrace(); }catch(IOException e){ e.printStackTrace(); } }这当中对获取的地点要进行保存,这时候就要考虑到用什么数据结构才能实现省市区之间有关联呢?
<pre name="code" class="java"> List province=new ArrayList(); String flag; Map<String,List> City=new HashMap<>(); Map<String,List> Distric=new HashMap<>(); Map<String,List> ID=new HashMap<>();
通过上面几个函数把省市区信息都保存到定义的这几个结构里面了。到此就剩下下拉框的创建并开始调用这几个结构啦。
这是layout里面的布局文件 <a target=_blank href="http://blog.csdn.net/greenappple/article/details/7046947">参考</a>
<pre style="background-color: rgb(255, 255, 255); font-family: 宋体; font-size: 9pt;"><<span style="color:#000080;"><strong>LinearLayout </strong></span><span style="color:#660e7a;"><strong>android</strong></span><span style="color:#0000ff;"><strong>:layout_height=</strong></span><span style="color:#008000;"><strong>"40dip" </strong></span><span style="color:#008000;"><strong> </strong></span><span style="color:#660e7a;"><strong>android</strong></span><span style="color:#0000ff;"><strong>:layout_width=</strong></span><span style="color:#008000;"><strong>"fill_parent" </strong></span><span style="color:#008000;"><strong> </strong></span><span style="color:#660e7a;"><strong>android</strong></span><span style="color:#0000ff;"><strong>:id=</strong></span><span style="color:#008000;"><strong>"@+id/LinearLayoutArea" </strong></span><span style="color:#660e7a;"><strong>android</strong></span><span style="color:#0000ff;"><strong>:orientation=</strong></span><span style="color:#008000;"><strong>"horizontal"</strong></span>> <<span style="color:#000080;"><strong>Spinner </strong></span><span style="color:#660e7a;"><strong>android</strong></span><span style="color:#0000ff;"><strong>:id=</strong></span><span style="color:#008000;"><strong>"@+id/spprovince" </strong></span><span style="color:#660e7a;"><strong>android</strong></span><span style="color:#0000ff;"><strong>:layout_width=</strong></span><span style="color:#008000;"><strong>"100dip" </strong></span><span style="color:#008000;"><strong> </strong></span><span style="color:#660e7a;"><strong>android</strong></span><span style="color:#0000ff;"><strong>:layout_height=</strong></span><span style="color:#008000;"><strong>"wrap_content"</strong></span>> </<span style="color:#000080;"><strong>Spinner</strong></span>> <<span style="color:#000080;"><strong>Spinner </strong></span><span style="color:#660e7a;"><strong>android</strong></span><span style="color:#0000ff;"><strong>:id=</strong></span><span style="color:#008000;"><strong>"@+id/spcity" </strong></span><span style="color:#660e7a;"><strong>android</strong></span><span style="color:#0000ff;"><strong>:layout_width=</strong></span><span style="color:#008000;"><strong>"110dip" </strong></span><span style="color:#008000;"><strong> </strong></span><span style="color:#660e7a;"><strong>android</strong></span><span style="color:#0000ff;"><strong>:layout_height=</strong></span><span style="color:#008000;"><strong>"wrap_content"</strong></span>> </<span style="color:#000080;"><strong>Spinner</strong></span>> <<span style="color:#000080;"><strong>Spinner </strong></span><span style="color:#660e7a;"><strong>android</strong></span><span style="color:#0000ff;"><strong>:id=</strong></span><span style="color:#008000;"><strong>"@+id/sparea" </strong></span><span style="color:#660e7a;"><strong>android</strong></span><span style="color:#0000ff;"><strong>:layout_width=</strong></span><span style="color:#008000;"><strong>"90dip" </strong></span><span style="color:#008000;"><strong> </strong></span><span style="color:#660e7a;"><strong>android</strong></span><span style="color:#0000ff;"><strong>:layout_height=</strong></span><span style="color:#008000;"><strong>"wrap_content"</strong></span>> </<span style="color:#000080;"><strong>Spinner</strong></span>> </<span style="color:#000080;"><strong>LinearLayout</strong></span>>
好啦,开始调用:参考
spprovince.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { adapter2 = new ArrayAdapter<String>( MainActivity.this, android.R.layout.simple_spinner_item, City.get(String.valueOf(position))); spcity.setAdapter(adapter2); flag = String.valueOf(position); } @Override public void onNothingSelected(AdapterView<?> parent) { } }); spcity.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { adapter3 = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_spinner_item, Distric.get(ID.get(flag).get(position))); sparea.setAdapter(adapter3); } @Override public void onNothingSelected(AdapterView<?> parent) { } }); sparea.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { txt.setText(spprovince.getSelectedItem().toString() + spcity.getSelectedItem().toString() + sparea.getSelectedItem().toString()); } @Override public void onNothingSelected(AdapterView<?> parent) { } });总体就是这样的。
相关文章推荐
- 浅谈android如何同时适配pad和手机
- Android程序 类QQ通知常驻在Notification栏 点击Notification正确回调到之前已经放置在后台的Task中的对应Activity,而不是创建它的一个新实例
- Android触摸机制
- ListView的adapter中getView方法一直调用
- Android Framework 记录之一
- Android 向下弹出式对话框
- android学习之service(一)
- 怎么判断android中ScrollView滑动到了最底部?
- Android开发教程精粹30篇
- Android Studio导入github上面的项目以及发生的问题
- android JNI调用系统liblog.so打印Log
- Android中处理崩溃异常
- Android 四大组件学习之BroadcastReceiver三
- Android train --ActionBar---Flagment--预习、实例
- android利用GPS和高德地图获取定位案例
- Android中popupWindow的简单应用
- android 分享到空间
- Android 进阶学习:Android视图绘制流程完全解析,带你一步步深入了解View(二)
- Android —— 自定义View的实现方法
- Android—开发自学历程(1)-Activity(5)-ListView