Android系统控件CheckBox是一个同时可以选择多个选项的控件;而RadioButton则是仅可以选择一个选项的控件;RadioGroup是RadioButton的承载体,程序运行时不可见,应用程序中可能包含一个或多个RadioGroup,一个RadioGroup包含多个RadioButton,在每个RadioGroup中,用户仅能够选择其中一个RadioButton。
下面就通过一个例子来加深对Spinner的理解。

图1 Spinner效果图
1.建立一个程序“SpinnerDemo”
程序包含3个子项,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行使用标签声明了一个Spinner控件;第6行代码中指定了该控件的宽度为“300dip”。
2.修改SpinnerDemo.java文件
在SpinnerDemo.java文件中,定义一个ArrayAdapter适配器,在ArrayAdapter中添加Spinner的内容,需要在代码中引入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子项1");
list .add("Spinner子项2");
list .add("Spinner子项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行代码建立了一个字符串数组列表(ArrayList),这种数组列表可以根据需要进行增减,表示数组列表中保存的是字符串类型的数据。
在代码的第3、4、5行中,使用add()方法分别向数组列表中添加3个字符串。
第6行代码建立了一个ArrayAdapter的数组适配器,数组适配器能够将界面控件和底层数据绑定在一起。
第7行代码设定了Spinner的浮动菜单的显示方式,其中,android.R.layout.simple_ spinner_dropdown_item是Android系统内置的一种浮动菜单。
第8行代码实现绑定过程,所有ArrayList中的数据,将显示在Spinner的浮动菜单中。
利用该段代码,适配器绑定界面控件和底层数据,如果底层数据更改了,用户界面也相应修改显示内容,因此不需要应用程序再监视,从而极大地简化了代码的复杂性。
由上述例子可以得出结论:与Android系统控件CheckBox和RadioButton相比,Sipnner需要的工作量大,但可以为用户提供相对来说较好的屏幕显示。如上所示,Spinner显示当前选中的选项,当单击右侧的下拉列表时,弹出一个可供选择的选项列表。为了实现该功能需满足以下条件。
(1)创建一个可供选择的选项列表(该列表可以是动态创建并被应用程序修改)。
(2)为Spinner的列表创建一个ArrayAdapter以实现其下拉列表的显示。这里需注意ArrayAdapter的格式(simple_spinner_item和simple_spinner_dropdown_item)是由Android系统定义的,它们不会出现在资源XML文件中。
(3)创建onItemSelectedListener来捕捉Spinner的选择事件。监听onItemSelected
Listener包含onItemSelected()方法和onNothingSelected()方法。