【移動應(yīng)用開發(fā)技術(shù)】Android如何實現(xiàn)尚型省市區(qū)三級聯(lián)動選擇效果_第1頁
【移動應(yīng)用開發(fā)技術(shù)】Android如何實現(xiàn)尚型省市區(qū)三級聯(lián)動選擇效果_第2頁
【移動應(yīng)用開發(fā)技術(shù)】Android如何實現(xiàn)尚型省市區(qū)三級聯(lián)動選擇效果_第3頁
【移動應(yīng)用開發(fā)技術(shù)】Android如何實現(xiàn)尚型省市區(qū)三級聯(lián)動選擇效果_第4頁
【移動應(yīng)用開發(fā)技術(shù)】Android如何實現(xiàn)尚型省市區(qū)三級聯(lián)動選擇效果_第5頁
已閱讀5頁,還剩3頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論