而三層下拉在很多地方都會用到,如:最常用到的縣市鄉鎮選取,所以就抽空寫這篇好了
本人用的是最白痴的寫法(因為我懶),其實還有其他寫法,不過這個寫法最快(最懶)
而且最直覺,就直接把二層連動下拉選單中的二維陣列再加一個三維陣列的而已
夠簡單也夠直覺吧(夠懶),下面就直接po程式碼,看完您就會覺得就這樣而已喔
其實也就是這麼簡單而已,我直接從連動式下拉選單改來的,看程式碼吧。
main.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#FFFFFF" > <Spinner android:id="@+id/type" android:layout_width="fill_parent" android:layout_height="45dp" android:layout_marginLeft="75dp" android:layout_marginRight="20dp" android:layout_marginTop="7dp" android:drawSelectorOnTop="true" android:layout_alignParentRight="true" /> <Spinner android:id="@+id/type2" android:layout_width="fill_parent" android:layout_height="45dp" android:layout_marginLeft="75dp" android:layout_marginRight="20dp" android:layout_marginTop="3dp" android:drawSelectorOnTop="true" android:layout_alignParentRight="true" android:layout_below="@id/type" /> <Spinner android:id="@+id/type3" android:layout_width="fill_parent" android:layout_height="45dp" android:layout_marginLeft="75dp" android:layout_marginRight="20dp" android:layout_marginTop="3dp" android:drawSelectorOnTop="true" android:layout_alignParentRight="true" android:layout_below="@+id/type2" /> </RelativeLayout>
TripleSpinnerActivity
package jim.demo.TripleSpinner; import android.app.Activity; import android.content.Context; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Spinner; import android.widget.AdapterView.OnItemSelectedListener; public class TripleSpinnerActivity extends Activity { private String[] type = new String[] {"茶類", "果汁類"};//載入第一下拉選單 private String[] tea = new String[]{"紅茶","綠茶","烏龍綠","青茶"};//起始畫面時預先載入第二下拉選單 private String[] tea2 = new String[]{"紅茶超好喝","紅茶喝完臉會紅"};//起始畫面時預先載入第三下拉選單 //第一下拉選取後載入第二下拉選單 private String[][] type2 = new String[][]{{"紅茶","綠茶","烏龍綠","青茶"},{"柳丁汁","西瓜汁","烏梅汁"}}; //第二下拉選取後載入第三下拉選單 private String[][][] type3 = new String[][][]{{{"紅茶超好喝","紅茶喝完臉會紅"},{"綠茶超好喝","綠茶喝完臉會綠"},{"烏龍茶超好喝","烏龍茶超烏龍"},{"青茶超好喝","青茶很尚青"}},{{"柳丁汁超好喝","柳丁汁好棒"},{"西瓜汁超好喝","西瓜汁還可以"},{"烏梅汁超好喝","烏梅汁還可以"}}}; private Spinner sp;//第一個下拉選單 private Spinner sp2;//第二個下拉選單 private Spinner sp3;//第三個下拉選單 private Context context; ArrayAdapter<String> adapter ; ArrayAdapter<String> adapter2; ArrayAdapter<String> adapter3; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); context = this; //程式剛啟始時載入第一個下拉選單 adapter = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, type); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); sp = (Spinner) findViewById(R.id.type); sp.setAdapter(adapter); sp.setOnItemSelectedListener(selectListener); //因為下拉選單第一個為茶類,所以先載入茶類群組進第二個下拉選單 adapter2 = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, tea); adapter2.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); sp2 = (Spinner) findViewById(R.id.type2); sp2.setAdapter(adapter2); sp2.setOnItemSelectedListener(selectListener2); //因為下拉選單第二個為紅茶,所以先載入紅茶群組進第三個下拉選單 adapter3 = new ArrayAdapter<String>(this,android.R.layout.simple_spinner_item, tea2); adapter3.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); sp3 = (Spinner) findViewById(R.id.type3); sp3.setAdapter(adapter3); } //第一個下拉類別的監看式 private OnItemSelectedListener selectListener = new OnItemSelectedListener(){ public void onItemSelected(AdapterView<?> parent, View v, int position,long id){ //讀取第一個下拉選單是選擇第幾個 int pos = sp.getSelectedItemPosition(); //重新產生新的Adapter,用的是二維陣列type2[pos] adapter2 = new ArrayAdapter<String>(context,android.R.layout.simple_spinner_item, type2[pos]); //載入第二個下拉選單Spinner sp2.setAdapter(adapter2); } public void onNothingSelected(AdapterView<?> arg0){ } }; //第二個下拉類別的監看式 private OnItemSelectedListener selectListener2 = new OnItemSelectedListener(){ public void onItemSelected(AdapterView<?> parent, View v, int position,long id){ //讀取第一個下拉選單是選擇第幾個 int pos = sp.getSelectedItemPosition(); //讀取第二個下拉選單是選擇第幾個 int pos2 = sp2.getSelectedItemPosition(); //重新產生新的Adapter,用的是三維陣列type3[pos][pos2] adapter3 = new ArrayAdapter<String>(context,android.R.layout.simple_spinner_item, type3[pos][pos2]); //載入第三個下拉選單Spinner sp3.setAdapter(adapter3); } public void onNothingSelected(AdapterView<?> arg0){ } }; }
執行後畫面
選取第二個下拉選單
點選後第二個下拉和第三個下拉選單改變
第三個下拉選單內容也改變了
第一個下拉選單改變會連動其他二個下拉選單改變
說明:
1.和連動式下拉選單其實改變的沒有很多,只是加入一個Spineer和一個三維陣列
2.主要的內容要照著三維陣列內的設定,第一個下拉是類別、第二個下拉是品項
、第三個下拉是評價,所以一開始下拉選單內的預設值因為第一個下拉的類別
會預設為茶類,而第二下拉會是紅茶,所以第三個下拉就給它一維陣列紅茶的評價
3.新增的第二個下拉選單選取監看式,new ArrayAdapter<String>產出的是一維陣列
括號逗點前第一區只是下拉的樣式,所以不用管它,第二區帶入三維陣列
給三維陣列type3第一和第二下拉的選取項就會產出一維陣列選項讓ArrayAdapter載入
Spineer3中。
後記:
以上說明應該清楚了,如有問題歡迎來信指教,謝謝。