




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
【移动应用开发技术】Android如何实现尚型省市区三级联动选择效果
这篇文章主要介绍了Android如何实现尚型省市区三级联动选择效果,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让在下带着大家一起了解一下。Android省市区选择三级联动效果,一个不大不小的功能,就算你做过,但是没有相关的代码直接写,也要花掉你至少半天时间。先上效果图一、准备数据我是用的本地的json数据(走网络的话太慢,每次都要请求),放在asserts中。格式如下:[{
"name":
"河北省",
"city":
[
{
"name":
"石家庄市",
"area":
[
"长安区",
"桥东区",
"桥西区",
"新华区",
"郊
区",
"井陉矿区",
"井陉县",
"正定县",
"栾城县",
"行唐县",
"灵寿县",
"高邑县",
"深泽县",
"赞皇县",
"无极县",
"平山县",
"元氏县",
"赵
县",
"辛集市",
"藁",
"晋州市",
"新乐市",
"鹿泉市"
]
},]二、解析数据首先根据json生成Province对象然后通过getAssets().open("citylist.json");获取文件输入流,接着转成字节,最终获取字符串。然后用Gson解析字符串得到Province的List对象。由于读文件是IO操作,这里我用了RxJava,代码如下:/**
*
从assert文件夹中获取json数据
*/
private
void
initJsonData()
{
Observable.create(new
ObservableOnSubscribe<List<Province>>()
{
@Override
public
void
subscribe(ObservableEmitter<List<Province>>
emitter)
throws
Exception
{
List<Province>
provinces
=
new
ArrayList<>();
try
{
StringBuffer
sb
=
new
StringBuffer();
InputStream
is
=
getAssets().open("citylist.json");//打开json数据
byte[]
by
=
new
byte[is.available()];//转字节
int
len
=
-1;
while
((len
=
is.read(by))
!=
-1)
{
sb.append(new
String(by,
0,
len,
"utf8"));//根据字节长度设置编码
}
is.close();//
关闭流
//
通过Gson将字符串转成对象list
Gson
gson
=
new
Gson();
provinces
=
gson.fromJson(sb.toString(),
new
TypeToken<List<Province>>()
{
}.getType());
}
catch
(Exception
e)
{
e.printStackTrace();
}
finally
{
emitter.onNext(provinces);
}
}
}).subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new
Consumer<List<Province>>()
{
@Override
public
void
accept(List<Province>
provinces)
throws
Exception
{
if
(provinces
!=
null
&&
provinces.size()
>
0)
{
RegionSelectAvinces
=
provinces;
//
显示数据
showData();
}
}
});
}三、显示数据RxJava异步读取数据后就可以显示了,这里用了三个Spinner来分别显示省,市,区数据。显示的思路大家都清楚,这里不再赘述,代码如下/**
*
展示数据
*/
private
void
showData()
{
for
(Province
province
:
provinces)
{
provinceList.add(province.getName());
}
//
显示省份数据
spProvince.setAdapter(new
ArrayAdapter<String>(this,
android.R.layout.simple_spinner_item,
provinceList));
spProvince.setOnItemSelectedListener(new
AdapterView.OnItemSelectedListener()
{
@Override
public
void
onItemSelected(AdapterView<?>
parent,
View
view,
int
position,
long
id)
{
provincePosition
=
position;
provinceName
=
provinceList.get(position);
//
获取当前省份对应的城市list
cityList.clear();
List<Province.CityBean>
cityBeans
=
provinces.get(position).getCity();
for
(Province.CityBean
city
:
cityBeans)
{
cityList.add(city.getName());
}
//
刷新城市列表
spCity.setSelection(0);
cityName
=
cityList.get(0);
cityAdapter.notifyDataSetChanged();
//
刷新城区列表
updateArea(0);
}
@Override
public
void
onNothingSelected(AdapterView<?>
parent)
{
}
});
//
显示城市数据
spCity.setAdapter(cityAdapter
=
new
ArrayAdapter<String>(this,
android.R.layout.simple_spinner_item,
cityList));
spCity.setOnItemSelectedListener(new
AdapterView.OnItemSelectedListener()
{
@Override
public
void
onItemSelected(AdapterView<?>
parent,
View
view,
int
position,
long
id)
{
cityPosition
=
position;
cityName
=
cityList.get(position);
//
刷新城区列表
updateArea(position);
}
@Override
public
void
onNothingSelected(AdapterView<?>
parent)
{
}
});
//
显示城区数据
spArea.setAdapter(areaAdapter
=
new
ArrayAdapter<String>(this,
android.R.layout.simple_spinner_item,
areaList));
spArea.setOnItemSelectedListener(new
AdapterView.OnItemSelectedListener()
{
@Override
public
void
onItemS
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 机织物的性能与运动服要求考核试卷
- 体育会展物流与供应链管理优化考核试卷
- 国际物流与跨境交通运输考核试卷
- 矿业信息安全培训课件
- 服务可持续性考核试卷
- 信托项目的合同管理与履行考核试卷
- 电子垃圾回收利用项目投资合同
- 工程项目担保合同
- 国际融资租赁合同
- 中学生阅读后的思考征文
- 2024年湖北省中考化学真题(解析版)
- 2024至2030年中国小型模块化反应堆(SMR)行业分析及发展前景预测报告
- 机械基础(少学时)(第三版) 课件 0-绪论
- 2024年高考新课标全国卷政治试题分析及2025届高考复习备考建议
- 农贸市场保安工作总结
- 酒厂承包合作模式
- 2024年湖南长沙自贸投资发展集团有限公司招聘笔试冲刺题(带答案解析)
- 2024-2030年中国演出行业市场研究及发展前景预测报告
- 上市公司廉洁自律协议书
- JBT 14714-2024 锂离子电池X射线检测设备(正式版)
- DL-T1362-2014输变电工程项目质量管理规程
评论
0/150
提交评论