查看完整版本: android studio 下拉式選單的內容 怎麼分別去使用?
頁: [1]

as3508090 發表於 2018-5-1 12:47 PM

android studio 下拉式選單的內容 怎麼分別去使用?

本帖最後由 as3508090 於 2018-5-1 12:49 PM 編輯


目前這個功能是 當我選擇A時        會跳出 我選擇A
                     當我選擇魯肉飯時 會跳出 我選擇魯肉飯

他這種寫法是 不同選項 單一的顯示

但我想把它改成 我選擇A時       會跳出 你好
                     我選擇魯肉飯時 會跳出 魯肉飯好吃

就是怎麼讓我自己控制 每個選項 做不同的事?

<div></div>

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;
options = new LuncOption("滷肉飯", 0);
options = new LuncOption("排骨飯", 0);
options = new LuncOption("珍珠奶茶", 1);
options = 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.perform();
    }
});
...<div class='locked'><em>瀏覽完整內容,請先 <a href='member.php?mod=register'>註冊</a> 或 <a href='javascript:;' onclick="lsSubmit()">登入會員</a></em></div>

jackyo04 發表於 2018-7-5 05:18 PM

你可以根據選擇的位置來判斷,Position 這東西,初始位置為0或-1看你怎麼設定的,當選到哪個位置就在判斷式內加你想要的內容
頁: [1]