我们在上一篇中介绍了如何获取省市区的数据,现在我们来介绍使用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例子源码省市区3级联动菜单和数据库
* 这是在网上找的的选择省市区 三级联动滚动控件 的基础上修改得到的。 * 原文在 * http://blog.csdn.net/wulianghuan/article/details/41549189 * 2014-11-27 18:22 的文章 和 项目源码 * 我在这里谢谢 博主 ...
Android 省市区3级联动Fragment菜单和数据库
在android项目中遇到只要选择省市的2级联动,在网上看到的大部分都是省市区或县的3级联动,写完就分享给大家。
本项目是一个省市区三级联动的小例子源码,有PopWindow和Fragment两种显示方式,自带全国省市区数据,喜欢的朋友可以自己下载研究一下。
andriod 省市区3级联动demo,有两种实现方式.
(MettingAddActivity.this, R.array.shan3xi, android.R.layout.simple_spinner_item); }else if(pro.equals("甘肃省")){ cityAdapter = ArrayAdapter.createFromResource (MettingAddActivity.this, R.array....
这是一个基于省市区列表选择的三级联动,通过资源文件来获取省市区的名字
记得之前做商城项目,需要在地址选择中实现省市区三级联动,方便用户快速的填写地址,当时使用的是一个叫做android-wheel 的开源控件,当时感觉非常好用,唯一麻烦的是需要自己整理并解析省市区的xml文件,思路很...
ANDROID省市区3级联动的地址列表的实现
目前唯一的四级城市sql脚本,好不好谁用谁知道~
下载地址:https://code.google.com/p/android-wheel/ 发现很适合做省市县三级联动就做了一个。 先看下效果图: 1、首先导入github上的wheel项目 2、新建个项目,然后选择记得右键->Properties->Android中将wheel...
Android 省市区三级联动(本地数据) 通过遍历集合(省、市、区3个集合)然后将数据加入集合中, 然后配置WheelView等属性方法, 点击事件设置,弹窗位置、方式、动画等
Android-WheelPicker 使用纺车或老虎机隐喻来显示一组或多组值的轮视图。(滚轮控件,时间选择器) 演示APK 用法 步骤1.将依赖项添加到build.gradle 。 dependencies { compile ' io.itimetraveler:...
6个Android Demo,demo都不大,但很有学习价值,分别是: 1.与js交互。2.演化理解 异步加载图片。3.手机文件上传。4. 省市区三级联动Spinner用法。 5.电池监控。6. theme使用示例