我们在上一篇中介绍了如何获取省市区的数据,现在我们来介绍使用spinner控件来实现省市区3级联动的例子。
下面的代码是我在开发项目时实现的。
首先我们展示下布局文件中的3个spinner
<LinearLayout android:layout_height="40dip"
android:layout_width="fill_parent"
android:id="@+id/LinearLayoutArea" android:orientation="horizontal">
<Spinner android:id="@+id/spprovince" android:layout_width="100dip"
android:layout_height="wrap_content">
</Spinner>
<Spinner android:id="@+id/spcity" android:layout_width="100dip"
android:layout_height="wrap_content">
</Spinner>
<Spinner android:id="@+id/sparea" android:layout_width="100dip"
android:layout_height="wrap_content">
</Spinner>
</LinearLayout>
接下来是对这些spinner控件赋值绑定事件的代码:
// 从数据库中读取省市区的数据
// 初始化省下拉框
private void InitialProvince() {
try {
Map<Integer, List> data = AddressUtil.getProvince(file);
provinceList = data.get(1);
provinceData = data.get(0);
ArrayAdapter provinceAdapter = new ArrayAdapter(mContext,
android.R.layout.simple_spinner_item, provinceList);
provinceAdapter
.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); // 样式
spprovince.setAdapter(provinceAdapter);
spprovince.setOnItemSelectedListener(itemSelectedListener);
} catch (Exception e) {
Log.d("WineStock", "InitialProvince:" + e.getMessage());
}
}
String selectedProvince = "";// 下拉框中选择的省
// 省下拉框事件
private OnItemSelectedListener itemSelectedListener = new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
try {
Spinner spProvince = (Spinner) parent;
selectedProvince = (String) spProvince
.getItemAtPosition(position);
ArrayAdapter cityAdapter = null;
Map<String, Integer> data = (Map) provinceData.get(position);// 根据所选择的得到对应的省份id
// 然后得到城市
int pid = data.get(selectedProvince);// 得到省份的id
Map<Integer, List> citymap = AddressUtil
.getCityByPid(pid, file);
cityList = citymap.get(1);
cityData = citymap.get(0);
cityAdapter = new ArrayAdapter(mContext,
android.R.layout.simple_spinner_item, cityList);
cityAdapter
.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spcity.setAdapter(cityAdapter);
spcity.setOnItemSelectedListener(citySelectedListener);
} catch (Exception e) {
Log.d("WineStock", "Select Province error:" + e.getMessage());
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
// TODO Auto-generated method stub
}
};
String selectedCity = "";// 下拉框中选择的市
// 市下拉框事件
private OnItemSelectedListener citySelectedListener = new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
try {
Spinner spCity = (Spinner) parent;
selectedCity = (String) spCity.getItemAtPosition(position);
ArrayAdapter areaAdapter = null;
Map<String, Integer> data = (Map) cityData.get(position);// 根据所选择的得到对应的省份id
// 然后得到城市
int pid = data.get(selectedCity);// 得到城市的id
List<String> listArea = AddressUtil.getAreaByPid(pid, file);
areaAdapter = new ArrayAdapter(mContext,
android.R.layout.simple_spinner_item, listArea);
areaAdapter
.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
sparea.setAdapter(areaAdapter);
sparea.setOnItemSelectedListener(areaSelectedListener);
} catch (Exception e) {
Log.d("WineStock", "Select City error:" + e.getMessage());
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
// TODO Auto-generated method stub
}
};
String selectedArea = "";// 下拉框中选择的区
// 区下拉框事件
private OnItemSelectedListener areaSelectedListener = new OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view,
int position, long id) {
try {
Spinner spArea = (Spinner) parent;
selectedArea = (String) spArea.getItemAtPosition(position);
if (selectedProvince != "" && selectedCity != ""
&& selectedArea != "") {
String strAdd = selectedProvince + selectedCity
+ selectedArea;
etaddress.setText(strAdd);
}
} catch (Exception e) {
Log.d("WineStock", "Select Area error:" + e.getMessage());
}
}
@Override
public void onNothingSelected(AdapterView<?> parent) {
// TODO Auto-generated method stub
}
};
分享到:
相关推荐
总的来说,"Android省市区三级联动滚轮选择——Cascade_Master"是一个实用的Android组件,它利用开源技术实现了高效、流畅的地址选择功能,对于开发涉及地址输入的Android应用来说,是一个值得采纳的解决方案。
总结,实现Android省市区三级联动需要对数据结构有清晰的理解,掌握UI组件的使用,尤其是Spinner,以及熟悉数据加载和事件监听机制。此外,优化用户体验和处理异常情况也是必不可少的。通过这个功能的实现,开发者...
综上所述,"android省市区三级联动地址选择器demo"涉及到了Android UI设计、事件监听、数据绑定、数据源管理、性能优化等多个方面,是Android开发中的一个基础但重要的实践案例。通过学习和理解这个Demo,开发者可以...
在给定的资源中,“Android 实现省市区三级联动(带有省市区json资源)”是一个示例项目,它演示了如何在Android应用中有效地实现这一功能。 首先,我们要理解“自定义View”。在Android原生控件无法满足特定需求时...
这个"安卓三级联动省市联动多级联动相关-Android省市区三级联动真实数据.rar"压缩包文件提供了一个实现此类功能的示例。下面将详细解释这个概念以及如何在实际项目中应用。 首先,"三级联动"指的是在一个界面上,...
在Android开发中,实现省市区3级联动菜单是一项常见的需求,尤其在地址选择、物流配送等场景中。这个例子源码提供了一种解决方案,通过数据库存储数据并动态加载到联动菜单中。以下是对这个源码的详细解析: 首先,...
本示例“android 省市区三级联动代码实现”着重讲解如何完成这一任务,主要涉及以下几个核心知识点: 1. JSON解析:在描述中提到,数据来源可能是JSON格式,这是一种轻量级的数据交换格式,易于人阅读和编写,同时...
总之,实现Android省市区3级联动菜单和数据库涉及的知识点包括:Fragment管理、UI设计、SQLite数据库操作、事件监听、数据加载优化以及数据持久化。通过这些技术的组合应用,我们可以创建出一个高效且用户体验良好的...
* 这是在网上找的的选择省市区 三级联动滚动控件 的基础上修改得到的。 * 原文在 * http://blog.csdn.net/wulianghuan/article/details/41549189 * 2014-11-27 18:22 的文章 和 项目源码 * 我在这里谢谢 博主 ...
综上所述,“android省市区三级联动精美Ui”资源提供了一个完整的解决方案,包括UI设计和后台逻辑,帮助开发者快速实现省市区选择功能,提升应用的专业性和用户体验。通过理解和应用上述知识点,开发者可以更有效地...
在本文中,我们将深入探讨如何在uni-app框架中利用uView UI组件库来实现省市区三级联动的效果。uni-app是一个基于Vue.js的多端开发框架,它允许开发者编写一次代码,即可在iOS、Android、H5、小程序等多个平台运行。...
HTML移动端省市区三级联动是一种常见的前端开发技术,用于在移动设备上实现省、市、区的下拉选择功能。这个技术对于构建具有地理定位服务的Web应用尤其重要,如在线购物、生活服务类应用等。在给定的场景中,我们有...
- 在实现二级联动时,首先需要设计一个合适的数据结构来存储省市区数据。通常,我们可以使用树形结构或者两级列表来表示。每个省对应一个节点,节点下包含若干个城市节点。 - 数据可以来源于网络API,也可以预先...
在这个"Android例子源码省市区3级联动菜单和数据库"项目中,开发者提供了实现这一功能的具体示例,同时结合了数据库存储全国的省市区数据。 首先,让我们关注这个项目的两个主要显示方式:PopWindow和Fragment。...
这个"Android(省市区三级联动Dialog)Demo"是一个实际的应用示例,开发者可能使用了ListView或者RecyclerView来展示每个级别的列表,并通过Adapter进行数据绑定。为了实现联动效果,需要维护一个包含所有省市区数据的...
在Android开发中,"android省市区城市三级列表选择"是一个常见的功能需求,特别是在涉及地理位置、配送地址或用户信息填写的应用中。这个功能涉及到一个三级联动的列表选择器,即省份、城市和区县三个层级之间的数据...
在Android开发中,"省市区三级联动"是一个常见的需求,特别是在构建地址选择功能时。它模仿了iOS中的类似设计,允许用户逐级选择省份、城市和区县,以完成一个完整的地址输入。在这个过程中,"wheelview"组件常被...
在IT行业中,省市区三级联动是一种常见的数据筛选和选择机制,尤其在开发移动应用或Web应用时,用于用户输入地址信息。这个项目标题为“全国省市区三级联动”,表明它是一个实现这一功能的小型示例代码,适用于...