




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
【移動應(yīng)用開發(fā)技術(shù)】Android如何實現(xiàn)尚型省市區(qū)三級聯(lián)動選擇效果
這篇文章主要介紹了Android如何實現(xiàn)尚型省市區(qū)三級聯(lián)動選擇效果,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓在下帶著大家一起了解一下。Android省市區(qū)選擇三級聯(lián)動效果,一個不大不小的功能,就算你做過,但是沒有相關(guān)的代碼直接寫,也要花掉你至少半天時間。先上效果圖一、準(zhǔn)備數(shù)據(jù)我是用的本地的json數(shù)據(jù)(走網(wǎng)絡(luò)的話太慢,每次都要請求),放在asserts中。格式如下:[{
"name":
"河北省",
"city":
[
{
"name":
"石家莊市",
"area":
[
"長安區(qū)",
"橋東區(qū)",
"橋西區(qū)",
"新華區(qū)",
"郊
區(qū)",
"井陘礦區(qū)",
"井陘縣",
"正定縣",
"欒城縣",
"行唐縣",
"靈壽縣",
"高邑縣",
"深澤縣",
"贊皇縣",
"無極縣",
"平山縣",
"元氏縣",
"趙
縣",
"辛集市",
"藁",
"晉州市",
"新樂市",
"鹿泉市"
]
},]二、解析數(shù)據(jù)首先根據(jù)json生成Province對象然后通過getAssets().open("citylist.json");獲取文件輸入流,接著轉(zhuǎn)成字節(jié),最終獲取字符串。然后用Gson解析字符串得到Province的List對象。由于讀文件是IO操作,這里我用了RxJava,代碼如下:/**
*
從assert文件夾中獲取json數(shù)據(jù)
*/
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數(shù)據(jù)
byte[]
by
=
new
byte[is.available()];//轉(zhuǎn)字節(jié)
int
len
=
-1;
while
((len
=
is.read(by))
!=
-1)
{
sb.append(new
String(by,
0,
len,
"utf8"));//根據(jù)字節(jié)長度設(shè)置編碼
}
is.close();//
關(guān)閉流
//
通過Gson將字符串轉(zhuǎn)成對象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;
//
顯示數(shù)據(jù)
showData();
}
}
});
}三、顯示數(shù)據(jù)RxJava異步讀取數(shù)據(jù)后就可以顯示了,這里用了三個Spinner來分別顯示省,市,區(qū)數(shù)據(jù)。顯示的思路大家都清楚,這里不再贅述,代碼如下/**
*
展示數(shù)據(jù)
*/
private
void
showData()
{
for
(Province
province
:
provinces)
{
provinceList.add(province.getName());
}
//
顯示省份數(shù)據(jù)
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);
//
獲取當(dāng)前省份對應(yīng)的城市l(wèi)ist
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();
//
刷新城區(qū)列表
updateArea(0);
}
@Override
public
void
onNothingSelected(AdapterView<?>
parent)
{
}
});
//
顯示城市數(shù)據(jù)
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);
//
刷新城區(qū)列表
updateArea(position);
}
@Override
public
void
onNothingSelected(AdapterView<?>
parent)
{
}
});
//
顯示城區(qū)數(shù)據(jù)
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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 企業(yè)員工合伙合同范本
- 個人英文傭金合同范本
- 亮化購貨合同范本
- 代理續(xù)約合同范本
- 魚池出租合同范本
- 公司裝飾勞務(wù)合同范例
- 兼職工作合同范本
- 停止合作合同范本
- 水上安全合同范本
- 做綠化合同范本
- 部編版小學(xué)一年級語文下冊《春夏秋冬》課件
- 中國煙草總公司鄭州煙草研究院筆試試題2023
- 建設(shè)法規(guī)(全套課件)
- 心衰患者的容量管理中國專家共識-共識解讀
- 外用激素合理使用
- 個人投資收款收據(jù)
- H3C全系列產(chǎn)品visio圖標(biāo)庫
- 新生兒常見儀器的使用與維護 課件
- 魯棒控制理論基礎(chǔ)1-2章
- 工藝能力分析報告
- 《給校園植物掛牌》課件
評論
0/150
提交評論