Android系統(tǒng)控件CheckBox是一個(gè)同時(shí)可以選擇多個(gè)選項(xiàng)的控件;而RadioButton則是僅可以選擇一個(gè)選項(xiàng)的控件;RadioGroup是RadioButton的承載體,程序運(yùn)行時(shí)不可見,應(yīng)用程序中可能包含一個(gè)或多個(gè)RadioGroup,一個(gè)RadioGroup包含多個(gè)RadioButton,在每個(gè)RadioGroup中,用戶僅能夠選擇其中一個(gè)RadioButton。
下面就通過一個(gè)例子來加深對(duì)Spinner的理解。

圖1 Spinner效果圖
1.建立一個(gè)程序“SpinnerDemo”
程序包含3個(gè)子項(xiàng),Spinner控件在XML文件中的代碼如代碼清單1所示。
代碼清單1 main.xml
<TextView android:id="@+id/TextView01"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@string/hello"/>
<Spinner android:id="@+id/Spinner01"
android:layout_width="300dip"
android:layout_height="wrap_content">
</Spinner>
在上述代碼中,第5行使用標(biāo)簽聲明了一個(gè)Spinner控件;第6行代碼中指定了該控件的寬度為“300dip”。
2.修改SpinnerDemo.java文件
在SpinnerDemo.java文件中,定義一個(gè)ArrayAdapter適配器,在ArrayAdapter中添加Spinner的內(nèi)容,需要在代碼中引入android.widget.ArrayAdapter和android.widget.Spinner。
代碼清單2 SpinnerDemo.java
Spinner spinner = (Spinner) findViewById(R.id.Spinner01);
List<String> list = new ArrayList<String>();
list .add("Spinner子項(xiàng)1");
list .add("Spinner子項(xiàng)2");
list .add("Spinner子項(xiàng)3");
ArrayAdapter adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_spinner_item, list );
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
spinner.setAdapter(adapter);
本段代碼中,第2行代碼建立了一個(gè)字符串?dāng)?shù)組列表(ArrayList),這種數(shù)組列表可以根據(jù)需要進(jìn)行增減,表示數(shù)組列表中保存的是字符串類型的數(shù)據(jù)。
在代碼的第3、4、5行中,使用add()方法分別向數(shù)組列表中添加3個(gè)字符串。
第6行代碼建立了一個(gè)ArrayAdapter的數(shù)組適配器,數(shù)組適配器能夠?qū)⒔缑婵丶偷讓訑?shù)據(jù)綁定在一起。
第7行代碼設(shè)定了Spinner的浮動(dòng)菜單的顯示方式,其中,android.R.layout.simple_ spinner_dropdown_item是Android系統(tǒng)內(nèi)置的一種浮動(dòng)菜單。
第8行代碼實(shí)現(xiàn)綁定過程,所有ArrayList中的數(shù)據(jù),將顯示在Spinner的浮動(dòng)菜單中。
利用該段代碼,適配器綁定界面控件和底層數(shù)據(jù),如果底層數(shù)據(jù)更改了,用戶界面也相應(yīng)修改顯示內(nèi)容,因此不需要應(yīng)用程序再監(jiān)視,從而極大地簡化了代碼的復(fù)雜性。
由上述例子可以得出結(jié)論:與Android系統(tǒng)控件CheckBox和RadioButton相比,Sipnner需要的工作量大,但可以為用戶提供相對(duì)來說較好的屏幕顯示。如上所示,Spinner顯示當(dāng)前選中的選項(xiàng),當(dāng)單擊右側(cè)的下拉列表時(shí),彈出一個(gè)可供選擇的選項(xiàng)列表。為了實(shí)現(xiàn)該功能需滿足以下條件。
(1)創(chuàng)建一個(gè)可供選擇的選項(xiàng)列表(該列表可以是動(dòng)態(tài)創(chuàng)建并被應(yīng)用程序修改)。
(2)為Spinner的列表創(chuàng)建一個(gè)ArrayAdapter以實(shí)現(xiàn)其下拉列表的顯示。這里需注意ArrayAdapter的格式(simple_spinner_item和simple_spinner_dropdown_item)是由Android系統(tǒng)定義的,它們不會(huì)出現(xiàn)在資源XML文件中。
(3)創(chuàng)建onItemSelectedListener來捕捉Spinner的選擇事件。監(jiān)聽onItemSelected
Listener包含onItemSelected()方法和onNothingSelected()方法。