【移动应用开发技术】Android如何实现尚型省市区三级联动选择效果_第1页
【移动应用开发技术】Android如何实现尚型省市区三级联动选择效果_第2页
【移动应用开发技术】Android如何实现尚型省市区三级联动选择效果_第3页
【移动应用开发技术】Android如何实现尚型省市区三级联动选择效果_第4页
【移动应用开发技术】Android如何实现尚型省市区三级联动选择效果_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

【移动应用开发技术】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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论