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

相关文章

如何设置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)的设计,中断的几种方式:外部硬件中断、内部中断和软中断。通过中断做了一个会走的时钟和屏幕上输入字符的程序。 我自己理解中断的一些作用: 为了更好的利用处理器的性能。协同快速和慢速设备一起工作

安卓链接正常显示,ios#符被转义%23导致链接访问404

原因分析: url中含有特殊字符 中文未编码 都有可能导致URL转换失败,所以需要对url编码处理  如下: guard let allowUrl = webUrl.addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else {return} 后面发现当url中有#号时,会被误伤转义为%23,导致链接无法访问

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

透彻!驯服大型语言模型(LLMs)的五种方法,及具体方法选择思路

引言 随着时间的发展,大型语言模型不再停留在演示阶段而是逐步面向生产系统的应用,随着人们期望的不断增加,目标也发生了巨大的变化。在短短的几个月的时间里,人们对大模型的认识已经从对其zero-shot能力感到惊讶,转变为考虑改进模型质量、提高模型可用性。 「大语言模型(LLMs)其实就是利用高容量的模型架构(例如Transformer)对海量的、多种多样的数据分布进行建模得到,它包含了大量的先验

cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个?

跨平台系列 cross-plateform 跨平台应用程序-01-概览 cross-plateform 跨平台应用程序-02-有哪些主流技术栈? cross-plateform 跨平台应用程序-03-如果只选择一个框架,应该选择哪一个? cross-plateform 跨平台应用程序-04-React Native 介绍 cross-plateform 跨平台应用程序-05-Flutte