而三層下拉在很多地方都會用到,如:最常用到的縣市鄉鎮選取,所以就抽空寫這篇好了
本人用的是最白痴的寫法(因為我懶),其實還有其他寫法,不過這個寫法最快(最懶)
而且最直覺,就直接把二層連動下拉選單中的二維陣列再加一個三維陣列的而已
夠簡單也夠直覺吧(夠懶),下面就直接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中。
後記:
以上說明應該清楚了,如有問題歡迎來信指教,謝謝。




