簡體   English   中英

Android Java:使用枚舉

[英]Android Java: using enums

我想知道如何在 Java 中使用枚舉。 我正在開發 Android 的配方應用程序。 我在 TabHost 中有一個帶有四個選項卡的屏幕,並且想通過命名常量來引用它們,我相信最好通過枚舉來完成。

private enum mTab {
    TAB_NAME(0), TAB_INGREDIENT(1), TAB_STEP(2), TAB_MEDIA(3);

    final int numTab;

    private mTab(int num){
        this.numTab = num;
    }

    public int getValue(){
        return this.numTab;
    }

};

現在我想為每個選項卡創建一個不同的菜單。 例如,對於 TAB_INGREDIENT,我想要一個名為“添加成分”的菜單選項,而對於 TAB_MEDIA,我想要一個名為“添加圖像”的菜單選項。

我正在通過 onPrepareOptionsMenu() 創建菜單,就像這樣

public boolean onPrepareOptionsMenu(Menu menu) {
    // Clear menu before showing new menu
    menu.clear();

    super.onPrepareOptionsMenu(menu);

    // Create new menu based on current tab
    MenuInflater inflater = getMenuInflater();
    int tab = getTabHost().getCurrentTab();

    switch (tab) {
        ...
            }

    return true;
}

問題是我不知道在 switch 語句中放什么。 更具體地說,我不知道如何將“tab”(對應於當前選定的選項卡的 integer)與枚舉元素進行比較。

您可以在 mTab 枚舉中添加如下方法 -

public static mTab toMTab(int val) {
    mTab retMTab = null;
    for (mTab tempTab : mTab.values()) {
        if(tempTab.getValue() == val)  {
            retMTab = tempTab;
            break;
        }
    }
    return retMTab;
}

然后在你的 onPrepareOptionsMenu() 你可以這樣做 0

switch(mTab.toMTab(intVal)) {
  case TAB_NAME:
     ...
     break;
  case TAB_INGREDIENT:
     ..
     ...

}

枚舉變量可以直接放在Java中的switch語句中。 然而,我擔心 enum 在這種情況下可能不是最合適的選擇,因為您的每個選項卡都在做不同的事情:裝飾或子類化恕我直言會更好。 從我從 Josh Bloch 那里了解到,如果您必須向枚舉添加方法,它們都應該具有相同的名稱,例如:計算器上的操作。

每個字母都是枚舉的一部分:

Menu v;
...
    switch (v)
    {
        case A:
           ...
        case B:
        default:
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM