如果你覺(jué)得從頭開(kāi)始自定義一個(gè)View比較麻煩,那么組合幾個(gè)系統(tǒng)現(xiàn)有控件來(lái)實(shí)現(xiàn)需求的功能,會(huì)是你很好的一個(gè)選擇。
一、前言
最近在項(xiàng)目中,需要使用Spinner來(lái)實(shí)現(xiàn)下拉選擇功能,UI方面倒是要求不多。但是難點(diǎn)在于一個(gè)界面中有多個(gè)Spinner,并且有聯(lián)動(dòng)關(guān)系,數(shù)據(jù)需要在點(diǎn)擊Spinner的時(shí)候請(qǐng)求服務(wù)器。而且當(dāng)前Spinner數(shù)據(jù)依賴于前面選擇的一個(gè)或多個(gè)結(jié)果,當(dāng)獲取到最新數(shù)據(jù)后,才顯示下拉選項(xiàng)。
比如說(shuō)我需要先選擇一個(gè)倉(cāng)庫(kù),再選擇項(xiàng)目(依賴前面選擇的倉(cāng)庫(kù)),再選擇一個(gè)批次(依賴前面選擇的倉(cāng)庫(kù)和項(xiàng)目),如果我在選擇完倉(cāng)庫(kù)時(shí),就去判斷來(lái)預(yù)加載項(xiàng)目和批次的數(shù)據(jù),會(huì)使依賴邏輯變得非常復(fù)雜。
這時(shí)候就想在每次點(diǎn)擊一個(gè)Spinner的時(shí)候,去判斷依賴的選項(xiàng)是否已經(jīng)選擇,未選擇就提示需先選擇;如果已選擇,則進(jìn)行網(wǎng)絡(luò)請(qǐng)求,加載數(shù)據(jù)顯示到下拉選項(xiàng)中。
(本例使用選擇語(yǔ)言來(lái)進(jìn)行演示。)
二、使用系統(tǒng)Spinner
1. 首先,我想到的便是使用系統(tǒng)的Spinner,說(shuō)干就干,XML先上:
<Spinner android:id="@+id/spn_languages" android:layout_width="match_parent" android:layout_height="36dp"/>
2. 然后代碼設(shè)置Adapter匹配數(shù)據(jù)、設(shè)置OnItemSelectedListener綁定item選擇的事件:
spnLanguages = (Spinner) findViewById(R.id.spn_languages);ArrayAdapter<String> mAdapterSystemSpinner =