伊莉討論區
標題:
android studio 下拉式選單的內容 怎麼分別去使用?
[打印本頁]
作者:
as3508090
時間:
2018-5-1 12:47 PM
標題:
android studio 下拉式選單的內容 怎麼分別去使用?
本帖最後由 as3508090 於 2018-5-1 12:49 PM 編輯
[attach]123231078[/attach]
目前這個功能是 當我選擇A時 會跳出 我選擇A
當我選擇魯肉飯時 會跳出 我選擇魯肉飯
他這種寫法是 不同選項 單一的顯示
但我想把它改成 我選擇A時 會跳出 你好
我選擇魯肉飯時 會跳出 魯肉飯好吃
就是怎麼讓我自己控制 每個選項 做不同的事?
作者:
codewice
時間:
2018-5-1 08:08 PM
對 Spinner 以及它的 OnItemSelectedListener 來說,它從來都不知道什麼水餃、陽春麵。它只會知道 1) 要拿哪一些東西來顯示 (一堆字串) 2) 第幾個被選了
第幾個被選了,要做什麼事情,以你的範例來說就是「從字串陣列裡面挑一個字串出來,用 Toast 來顯示」
只不過剛剛好地,Spinner 顯示用的字串陣列,跟 item-selected 之後所使用的陣列剛好是同一個,兩者之間剛好是一對一的關係,所以我們可以用 Position 去找出來,不用擔心 ArrayOutOfBoundException。
回到你的問題,最直覺的方式就是在 onItemSelected 裡面用 Position 去選擇你要的邏輯
if (position == 0) {
Toast.makeText(... "你好"... );
} else if (position == 1) {
Toast.makeText(... "滷肉飯好吃"... );
} else {
Toast.makeText(... "其它"... );
}
複製代碼
這時候直覺會想到的第一個問題是,邏輯跟選項數量不對齊怎麼辦?未來要是多增加一個選項到 Lunch 裡面,整個邏輯不就要修改了?一個解法就是我們弄一個更豐富的資料結構,把它的品項名稱跟處理方法都放進去
舉例來說,我們產生一個新的 class,裡面有 name 跟 type。name 就是我們希望放在選單裡面的字串,type 就是品項的類型(通常會用 enum,為了舉例方便不寫那麼複雜,直接用 int 就好)。
class LunchOption {
String name;
int type;
LunchOption(String name, int type) {
this.name = name;
this.type = type;
}
@Override
public String toString() {
return this.name;
}
public void perform() {
if (type == 0) {
Log.d("Log", "你吃了" + this.name);
} else if (type == 1) {
Log.d("Log", "你喝了" + this.name);
} else {
Log.d("Log", "你瞧著手上的" + this.name + "卻不知道該怎麼辦);
}
}
}
複製代碼
接下來就是用它了
final LunchOption[] options = new LunchOption[4];
options[0] = new LuncOption("滷肉飯", 0);
options[1] = new LuncOption("排骨飯", 0);
options[2] = new LuncOption("珍珠奶茶", 1);
options[3] = new LuncOption("寫真集", 2);
ArrayAdapter<LunchOption> lunchList = new ArrayAdapter(context, android.R...., options);
spinner.setAdapter(lunchList);
spinner.setOnItemSelectedList(new ..... {
@Override
public void onItemSelected(....,int position, ..) {
options[position].perform();
}
});
複製代碼
作者:
jackyo04
時間:
2018-7-5 05:18 PM
你可以根據選擇的位置來判斷,Position 這東西,初始位置為0或-1看你怎麼設定的,當選到哪個位置就在判斷式內加你想要的內容
歡迎光臨 伊莉討論區 (http://www8.eyny.com/)
Powered by Discuz!