Spinner 的那些坑

首先說(shuō)下項(xiàng)目要求:

??? 制作一個(gè)設(shè)備列表,gridview 形式,數(shù)據(jù)源是JSONARRAY,效果圖差不多如下所示,主要功能就是展示設(shè)備,當(dāng)點(diǎn)擊一個(gè)設(shè)備的時(shí)候,彈出下拉列表,顯示設(shè)備的所有型號(hào)。

設(shè)備列表

??? 看到這個(gè)效果圖的時(shí)候,首先想到的是用Spinner吧,如果你想到的是PopupWindow,那證明你能力比我強(qiáng),可以return了,想繼續(xù)了解一下spinner那些坑的,可以continue~

??? 下面就是簡(jiǎn)單總結(jié)的要注意的事項(xiàng)。

Spinner

1) spinner 的下拉三角號(hào)的顯示與不顯示:? spinner 的 background 設(shè)置為 "@null" 時(shí),spinner 的三角號(hào)就可以消失了,默認(rèn)有三角號(hào)

2) spinner 的 onItemSelected() 方法,每次進(jìn)入 activity 的時(shí)候會(huì)調(diào)用 (有幾個(gè)spinner,就會(huì)調(diào)用幾次),onPause() 之后,onItemSelected() 方法會(huì)調(diào)用一次(無(wú)論有幾個(gè)spinner,都只會(huì)調(diào)用一次)。

初始化的調(diào)用,可通過(guò) spinner.setSelection(0,false); 屏蔽。

onPause() 之后的調(diào)用,可通過(guò)設(shè)置標(biāo)志位屏蔽,在onPause() 和 onResume() 中,設(shè)置flag,在onItemSelected() 方法中判斷flag,及時(shí)return。

3) 當(dāng)點(diǎn)擊同一 item 時(shí),不會(huì)回調(diào) onItemSelected() 方法, 通過(guò)在 onTouch() 方法中,通過(guò)反射機(jī)制,將上次選中的 id 設(shè)置為默認(rèn)值。

try{

Class clazz = AdapterView.class;

Field field = clazz.getDeclaredField("mOldSelectedRowId");

field.setAccessible(true);

field.setInt(spinner, Integer.MIN_VALUE);

}catch(Exception e) {

e.printStackTrace();

}

4) spinner.setSelection() 有兩種調(diào)用方式,單參和雙參,單參只傳顯示的 Position , 雙參的傳 position 和 一個(gè) boolean 值,看源碼似乎單參的是設(shè)定下一個(gè)選中項(xiàng),而雙參是直接回調(diào)onItemSelected(),反正剛開始寫的時(shí)候,怎么寫怎么不對(duì),后來(lái)寫對(duì)了之后,怎么寫怎么對(duì)。。。鬼知道為什么

反正,對(duì)于同一選項(xiàng)無(wú)法調(diào)用,就用反射,想屏蔽初始化,就用setSelection() 就對(duì)了

5)最后一個(gè)折磨我的問(wèn)題,就是spinner下拉選項(xiàng)的字體不居中?。●R丹,鬼知道我改了什么導(dǎo)致的,item_dropdown 布局文件中的 textview 的 gravity 明明已經(jīng)設(shè)置成 center 了,但文字就是不居中,垂直方向居中還能辦到,水平方向就是靠在左邊, Oh 我的天哪, 找了N久(兩個(gè)小時(shí)? maybe),終于找到原因了,我把原來(lái)的 textAlignment="center" 刪掉了,鬼知道我什么時(shí)候刪的,鬼知道這么重要,這個(gè)參數(shù)在 API 17 以后才啟用的,該參數(shù)適用于所有的 View 及其子類, 而 gravity 只適用于 TextView 及其子類,而且, textAlignment 參數(shù)只能設(shè)定左右是否居中,上下無(wú)能。


具體代碼不貼,貼了也無(wú)法人人可用,因?yàn)閿?shù)據(jù)源不一樣,至于以后會(huì)不會(huì)整合好成一個(gè)demo,看心情。that's all.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容