- Android Studio開發實戰:從零基礎到App上線(第2版)
- 歐陽燊
- 1185字
- 2019-12-06 12:07:20
3.3 適配視圖基礎
本節介紹適配器的基本概念,結合對下拉框Spinner的使用說明分別闡述數組適配器ArrayAdapter、簡單適配器SimpleAdapter的具體用法與展示效果。
3.3.1 下拉框Spinner
Spinner是下拉框,用于從一串列表中選擇某項,功能類似于單選按鈕的組合。下拉列表的展示方式有兩種,一種是在當前下拉框的正下方展示列表,此時把spinnerMode屬性設置為dropdown;另一種是在頁面中部以對話框形式展示列表,此時把spinnerMode屬性設置為dialog。另外,Spinner還可以在代碼中調用下列4個方法。
- setPrompt:設置標題文字。
- setAdapter:設置下拉列表的適配器。適配器可選擇ArrayAdapter或SimpleAdapter。
- setSelection:設置當前選中哪項。注意該方法要在setAdapter方法后調用。
- setOnItemSelectedListener:設置下拉列表的選擇監聽器,該監聽器要實現接口OnItemSelectedListener。
下面是一個下拉框調用選擇監聽器的代碼例子:


圖3-11 dialog模式的下拉列表
接下來看對話框模式的下拉效果,如圖3-11所示。頁面中部彈出六大行星的下拉列表;點擊具體行星項后自動收起下拉列表,并且下拉框中的文字變更為剛選中的行星名稱。
3.3.2 數組適配器ArrayAdapter
前面在演示Spinner時用到了setAdapter方法設置適配器。這個適配器好比一組數據的加工流水線,你丟給它一大把糖果,適配器把糖果排列好順序,然后拿來制作好的包裝盒,把糖果往里面一塞,出來的便是一個個精美的糖果盒。這個流水線可以做得很復雜,也可以做得簡單一些,最簡單的流水線就是之前演示Spinner用到的ArrayAdapter。
ArrayAdapter主要用于每行列表只展示文本的情況,有兩道工序,第一道工序是構造函數,除了提供一堆原始數據外(六大行星的名稱列表),還可以指定下拉框當前文本的包裝盒,即下面這行代碼里的R.layout.item_select,這個布局文件內只有一個TextView,定義了當前選中文本的大小、顏色、對齊方式等屬性。
// 聲明一個下拉列表的數組適配器 ArrayAdapter<String> starAdapter = new ArrayAdapter<String>(this, R.layout.item_select, starArray);
第二道工序是定義下拉列表的包裝盒,即下面代碼里的R.layout.item_dropdown,定義了對話框列表中每行文本的顯示屬性。
// 設置數組適配器的布局樣式 starAdapter.setDropDownViewResource(R.layout.item_dropdown);
經過這兩道工序,ArrayAdapter就明確了原料糖果的分揀過程與包裝方式,接下來只待Spinner調用setAdapter方法發出開動機器指令,適配器便會把一個一個包裝好的糖果盒輸出到屏幕界面。
3.3.3 簡單適配器SimpleAdapter
ArrayAdapter只能顯示文本列表,顯然不夠美觀,有時我們還想給列表加上圖標,比如六大行星是否分別顯示星球的小圖。這時SimpleAdapter就派上用場了,它允許在列表項中展示多個控件,包括文本與圖片。
SimpleAdapter的實現略微復雜,除了第二道工序與ArrayAdapter一樣外,第一道工序需要更多信息。例如,原料不但有糖果,還有賀卡,這樣就得把一大袋糖果和一大袋賀卡送進流水線,適配器每次拿一顆糖果和一張賀卡,把糖果與賀卡按規定塞進包裝盒。對于SimpleAdapter的構造函數來說,第二個參數Map容器放的是原料糖果與賀卡,第3個參數放的是包裝盒,第4個參數放的是糖果袋與賀卡袋的名稱,第5個參數放的是包裝盒里塞糖果的位置與塞賀卡的位置。
下面是下拉框Spinner使用SimpleAdapter的示例代碼:

下面是每個列表項的布局文件內容(包裝盒):


圖3-12 帶圖標的下拉列表
敲了這么多代碼,下面看一下加了圖標的下拉列表的效果圖,如圖3-12所示。此時下拉列表左邊顯示行星的圖片,右邊顯示行星的名稱。