基于Spinner的省市县三级联动选择显示

2024-04-25 19:58

本文主要是介绍基于Spinner的省市县三级联动选择显示,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

通过xml解析获得数据源,通过Spinner进行三级的联动显示,以下为源代码

Mainactivity代码
public class MainActivity extends Activity {Spinner spinner1, spinner2, spinner3;Province province = null;City city = null;List<Province> list = new ArrayList<Province>();List<String> list1 = new ArrayList<String>();// 省的名字列表List<String> list2 = new ArrayList<String>();// 城市名字列表List<String> list3 = new ArrayList<String>();// 地区名字列表int index1;// 选取的省int index2;// 选取的市ArrayAdapter<String> arrayAdapter1;ArrayAdapter<String> arrayAdapter2;ArrayAdapter<String> arrayAdapter3;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);// 初始化spinnerspinner2 = (Spinner) findViewById(R.id.s2);spinner1 = (Spinner) findViewById(R.id.s1);spinner3 = (Spinner) findViewById(R.id.s3);parser1();// 通过parse1函数,赋值listfinal int layOutId = android.R.layout.simple_list_item_1;// 获得省会的listfor (Province tp : list) {list1.add(tp.getName());}arrayAdapter1 = new ArrayAdapter<String>(this,layOutId, list1);// 初始化list2,用于初始化城市适配器for (City tc : list.get(0).getCitys()) {list2.add(tc.getName());}arrayAdapter2 = new ArrayAdapter<String>(this,layOutId, list2);// 初始化list3,用于初始化地区适配器for (String ts : list.get(0).getCitys().get(0).getDistricts()) {list3.add(ts);}arrayAdapter3 = new ArrayAdapter<String>(this,layOutId, list3);spinner1.setAdapter(arrayAdapter1);spinner1.setSelection(0, true);spinner2.setAdapter(arrayAdapter2);spinner2.setSelection(0, true);spinner3.setAdapter(arrayAdapter3);spinner3.setSelection(0, true);spinner1.setOnItemSelectedListener(new OnItemSelectedListener() {@Overridepublic void onItemSelected(AdapterView<?> parent, View view,int position, long id) {index1 = position;//对两个适配器清零arrayAdapter2.clear();arrayAdapter3.clear();// 获取点击的省份province = list.get(index1);// 遍历制作城市list2for (City tc : province.getCitys()) {list2.add(tc.getName());}//遍历制作地区list3for (String ts : province.getCitys().get(0).getDistricts()) {list3.add(ts);}// 对2号适配器重新赋值arrayAdapter2 = new ArrayAdapter<String>(MainActivity.this,layOutId,list2);spinner2.setAdapter(arrayAdapter2);arrayAdapter3 = new ArrayAdapter<String>(MainActivity.this,layOutId, list3);spinner3.setAdapter(arrayAdapter3);}@Overridepublic void onNothingSelected(AdapterView<?> parent) {}});spinner2.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {@Overridepublic void onItemSelected(AdapterView<?> parent, View view,int position, long id) {arrayAdapter3.clear();index2 = position;// 获取点击的城市city = list.get(index1).getCitys().get(index2);// 遍历制作地区list3for (String ts : city.getDistricts()) {list3.add(ts);}// 对3号适配器重新赋值arrayAdapter3 = new ArrayAdapter<String>(MainActivity.this,layOutId, list3);spinner3.setAdapter(arrayAdapter3);}@Overridepublic void onNothingSelected(AdapterView<?> parent) {}});}public void parser1() {// 创建解析器,并制定解析的xml文件XmlResourceParser parser = getResources().getXml(R.xml.citys_weather);try {int type = parser.getEventType();while (type != XmlResourceParser.END_DOCUMENT) {String tag = parser.getName();// 获得标签名switch (type) {case XmlResourceParser.START_DOCUMENT:list = new ArrayList<Province>();break;case XmlResourceParser.START_TAG:switch (tag) {case "pn":province = new Province();province.setName(parser.nextText());break;case "cn":city = new City();city.setName(parser.nextText());break;case "d":city.getDistricts().add(parser.nextText());break;default:break;}break;case XmlResourceParser.END_TAG:if ("c".equals(tag)) {province.getCitys().add(city);}if ("p".equals(tag)) {list.add(province);}break;default:break;}type = parser.next();}} catch (XmlPullParserException e) {// TODO Auto-generated catch blocke.printStackTrace();}/** catch (FileNotFoundException e) { // TODO Auto-generated catch block* e.printStackTrace(); }*/catch (NumberFormatException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}
}
province代码

public class Province {// 省份内private String name;private List<City> citys;public Province() {citys = new ArrayList<City>();}public String getName() {return name;}public void setName(String name) {this.name = name;}public List<City> getCitys() {return citys;}public void setCitys(List<City> citys) {this.citys = citys;}}
City代码
public class City {private String name;private List<String> districts;public City(){districts = new ArrayList<String>();}public String getName() {return name;}public void setName(String name) {this.name = name;}public List<String> getDistricts() {return districts;}public void setDistricts(List<String> districts) {this.districts = districts;}}
布局文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"tools:context="${relativePackage}.${activityClass}" ><Spinner
        android:id="@+id/s1"android:layout_width="wrap_content"android:layout_height="wrap_content"android:spinnerMode="dropdown" ></Spinner><Spinner
        android:id="@+id/s2"android:layout_width="wrap_content"android:layout_height="wrap_content"android:spinnerMode="dropdown" ></Spinner><Spinner
        android:id="@+id/s3"android:layout_width="wrap_content"android:layout_height="wrap_content"android:spinnerMode="dropdown" ></Spinner></LinearLayout>

这篇关于基于Spinner的省市县三级联动选择显示的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/935653

相关文章

RedisTemplate默认序列化方式显示中文乱码的解决

《RedisTemplate默认序列化方式显示中文乱码的解决》本文主要介绍了SpringDataRedis默认使用JdkSerializationRedisSerializer导致数据乱码,文中通过示... 目录1. 问题原因2. 解决方案3. 配置类示例4. 配置说明5. 使用示例6. 验证存储结果7.

idea中project的显示问题及解决

《idea中project的显示问题及解决》:本文主要介绍idea中project的显示问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录idea中project的显示问题清除配置重China编程新生成配置总结idea中project的显示问题新建空的pr

exfat和ntfs哪个好? U盘格式化选择NTFS与exFAT的详细区别对比

《exfat和ntfs哪个好?U盘格式化选择NTFS与exFAT的详细区别对比》exFAT和NTFS是两种常见的文件系统,它们各自具有独特的优势和适用场景,以下是关于exFAT和NTFS的详细对比... 无论你是刚入手了内置 SSD 还是便携式移动硬盘或 U 盘,都需要先将它格式化成电脑或设备能够识别的「文

Spring三级缓存解决循环依赖的解析过程

《Spring三级缓存解决循环依赖的解析过程》:本文主要介绍Spring三级缓存解决循环依赖的解析过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、循环依赖场景二、三级缓存定义三、解决流程(以ServiceA和ServiceB为例)四、关键机制详解五、设计约

电脑显示mfc100u.dll丢失怎么办?系统报错mfc90u.dll丢失5种修复方案

《电脑显示mfc100u.dll丢失怎么办?系统报错mfc90u.dll丢失5种修复方案》最近有不少兄弟反映,电脑突然弹出“mfc100u.dll已加载,但找不到入口点”的错误提示,导致一些程序无法正... 在计算机使用过程中,我们经常会遇到一些错误提示,其中最常见的就是“找不到指定的模块”或“缺少某个DL

Linux虚拟机不显示IP地址的解决方法(亲测有效)

《Linux虚拟机不显示IP地址的解决方法(亲测有效)》本文主要介绍了通过VMware新装的Linux系统没有IP地址的解决方法,主要步骤包括:关闭虚拟机、打开VM虚拟网络编辑器、还原VMnet8或修... 目录前言步骤0.问题情况1.关闭虚拟机2.China编程打开VM虚拟网络编辑器3.1 方法一:点击还原VM

CSS模拟 html 的 title 属性(鼠标悬浮显示提示文字效果)

《CSS模拟html的title属性(鼠标悬浮显示提示文字效果)》:本文主要介绍了如何使用CSS模拟HTML的title属性,通过鼠标悬浮显示提示文字效果,通过设置`.tipBox`和`.tipBox.tipContent`的样式,实现了提示内容的隐藏和显示,详细内容请阅读本文,希望能对你有所帮助... 效

基于Python实现多语言朗读与单词选择测验

《基于Python实现多语言朗读与单词选择测验》在数字化教育日益普及的今天,开发一款能够支持多语言朗读和单词选择测验的程序,对于语言学习者来说无疑是一个巨大的福音,下面我们就来用Python实现一个这... 目录一、项目概述二、环境准备三、实现朗读功能四、实现单词选择测验五、创建图形用户界面六、运行程序七、

前端知识点之Javascript选择输入框confirm用法

《前端知识点之Javascript选择输入框confirm用法》:本文主要介绍JavaScript中的confirm方法的基本用法、功能特点、注意事项及常见用途,文中通过代码介绍的非常详细,对大家... 目录1. 基本用法2. 功能特点①阻塞行为:confirm 对话框会阻塞脚本的执行,直到用户作出选择。②

如何设置vim永久显示行号

《如何设置vim永久显示行号》在Linux环境下,vim默认不显示行号,这在程序编译出错时定位错误语句非常不便,通过修改vim配置文件vimrc,可以在每次打开vim时永久显示行号... 目录设置vim永久显示行号1.临时显示行号2.永www.chinasem.cn久显示行号总结设置vim永久显示行号在li