spinner控件也是一種清單類型的控件,它的繼承關系如下:
java.lang.object
↳ android.view.view
↳ android.view.viewgroup
↳ android.widget.adapterview<t extends android.widget.adapter>
↳ android.widget.absspinner
↳ android.widget.spinner
android.widget.spinner繼承了android.view.viewgroup類。下面安排一個案例如圖6-5,有兩個spinner,顔色選擇spinner和星座選擇spinner。點選顔色選擇spinner右邊的 按鈕,如圖6-6所示,彈出單選對話框。

圖6-5 spinner控件 圖6-6 顔色選擇spinner
點選星座選擇spinner右邊的 按鈕,如圖6-7所示,彈出清單對話框。
圖6-7 星座選擇spinner
程式代碼請參考代碼清單6-3:
【代碼清單6-3】 chapter6_2/src/com/work/spinneractivity.java
public class spinneractivity extends activity {
@override
public void oncreate(bundle savedinstancestate) {
super.oncreate(savedinstancestate);
setcontentview(r.layout.main);
final textview txt2 = (textview) findviewbyid(r.id.textview02);
spinner s1 = (spinner) findviewbyid(r.id.spinner01);
final arrayadapter<charsequence> adapter = arrayadapter.createfromresource(
this, r.array.colors, android.r.layout.simple_spinner_item);
adapter.setdropdownviewresource(android.r.layout.simple_spinner_dropdown_item);
s1.setadapter(adapter);
s1.setonitemselectedlistener(
new onitemselectedlistener() {
public void onitemselected(
adapterview<?> parent, view view, int position, long id) {
txt2.settext(adapter.getitem(position).tostring());
}
public void onnothingselected(adapterview<?> parent) {
txt2.settext("沒選中的");
});
final textview txt4 = (textview) findviewbyid(r.id.textview04);
spinner s2 = (spinner) findviewbyid(r.id.spinner02);
arrayadapter<charsequence> adapterc = new arrayadapter<charsequence>(this,
android.r.layout.simple_spinner_item, constellations);
adapterc.setdropdownviewresource(android.r.layout.simple_spinner_item);
s2.setadapter(adapterc);
s2.setonitemselectedlistener(
txt4.settext(constellations[position]);
txt4.settext("沒選中的");
}
static final string[] constellations = new string[] {
"白羊座", "金牛座", "雙子座",
"巨蟹座", "獅子座", "處女座",
"天枰座", "天蠍座", "射手座",
"魔蠍座", "水瓶座", "雙魚座"
};
}
第一個顔色選擇spinner資料來源于values檔案夾内的arrays.xml檔案,
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="colors">
<item>紅色</item>
<item>橙色</item>
<item>黃色</item>
<item>綠色</item>
<item>藍色</item>
<item>紫色</item>
</string-array>
</resources>
通過下面的方法從一個資源xml檔案中加載資料,建立一個數組類的擴充卡對象,布局檔案是使用系統提供的layout.simple_spinner_item,這裡布局檔案設定的是spinner布局樣式。
final arrayadapter<charsequence> adapter = arrayadapter.createfromresource(
this, r.array.colors, android.r.layout.simple_spinner_item);
而彈出的下拉清單的樣式是由spinner的擴充卡的setdropdownviewresource()方法設定的。
adapter.setdropdownviewresource(android.r.layout.simple_spinner_dropdown_item);
第二個spinner用于星座選擇,資料是用數組存儲的。這兩個spinner的setonitemselectedlistener()方法的事件處理如下:
s1.setonitemselectedlistener(
new onitemselectedlistener() {
public void onitemselected(
adapterview<?> parent, view view, int position, long id) {
txt2.settext(adapter.getitem(position).tostring());
}
public void onnothingselected(adapterview<?> parent) {
txt2.settext("沒選中的");
}
});
其中的onitemselected(adapterview<?> parent, view view, int position, long id)方法是選中選擇項目時觸發的,其中的position選擇項目的位置,id是選擇項目的編号。而什麼都不選的方法是onnothingselected(adapterview<?> parent)。
出自《android開發案例驅動教程》第六章