基于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

相关文章

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

Python 中 requests 与 aiohttp 在实际项目中的选择策略详解

《Python中requests与aiohttp在实际项目中的选择策略详解》本文主要介绍了Python爬虫开发中常用的两个库requests和aiohttp的使用方法及其区别,通过实际项目案... 目录一、requests 库二、aiohttp 库三、requests 和 aiohttp 的比较四、requ

el-select下拉选择缓存的实现

《el-select下拉选择缓存的实现》本文主要介绍了在使用el-select实现下拉选择缓存时遇到的问题及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录项目场景:问题描述解决方案:项目场景:从左侧列表中选取字段填入右侧下拉多选框,用户可以对右侧

电脑显示hdmi无信号怎么办? 电脑显示器无信号的终极解决指南

《电脑显示hdmi无信号怎么办?电脑显示器无信号的终极解决指南》HDMI无信号的问题却让人头疼不已,遇到这种情况该怎么办?针对这种情况,我们可以采取一系列步骤来逐一排查并解决问题,以下是详细的方法... 无论你是试图为笔记本电脑设置多个显示器还是使用外部显示器,都可能会弹出“无HDMI信号”错误。此消息可能

如何选择适合孤独症兄妹的学校?

在探索适合孤独症儿童教育的道路上,每一位家长都面临着前所未有的挑战与抉择。当这份责任落在拥有孤独症兄妹的家庭肩上时,选择一所能够同时满足两个孩子特殊需求的学校,更显得尤为关键。本文将探讨如何为这样的家庭做出明智的选择,并介绍星贝育园自闭症儿童寄宿制学校作为一个值得考虑的选项。 理解孤独症儿童的独特性 孤独症,这一复杂的神经发育障碍,影响着儿童的社交互动、沟通能力以及行为模式。对于拥有孤独症兄

第10章 中断和动态时钟显示

第10章 中断和动态时钟显示 从本章开始,按照书籍的划分,第10章开始就进入保护模式(Protected Mode)部分了,感觉从这里开始难度突然就增加了。 书中介绍了为什么有中断(Interrupt)的设计,中断的几种方式:外部硬件中断、内部中断和软中断。通过中断做了一个会走的时钟和屏幕上输入字符的程序。 我自己理解中断的一些作用: 为了更好的利用处理器的性能。协同快速和慢速设备一起工作