Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Java:使用枚举_Java_Android_Enums - Fatal编程技术网

Android Java:使用枚举

Android Java:使用枚举,java,android,enums,Java,Android,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;

我想知道如何在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_配料,我需要一个名为“添加配料”的菜单选项,而对于TAB_媒体,我需要一个名为“添加图像”的菜单选项

我通过onPrepareOptions菜单创建菜单,如下所示

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(与当前选定的选项卡相对应的整数)与enum元素进行比较

枚举变量可以直接放在Java中的switch语句中。然而,我担心在这种情况下,enum可能不是最合适的选项,因为您的每个选项卡都在做一些不同的事情:修饰imho或子类化imho会更好。根据我从Josh Bloch那里学到的,如果你必须向枚举添加方法,它们应该都是相同的名称,例如:计算器上的操作

每个字母都是枚举的一部分:

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

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

public static mTab toMTab(int val) {
    mTab retMTab = null;
    for (mTab tempTab : mTab.values()) {
        if(tempTab.getValue() == val)  {
            retMTab = tempTab;
            break;
        }
    }
    return retMTab;
}
然后在OnPrepareOptions功能表中,您可以执行以下操作0

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

}

谢谢Gopi,这似乎有效。基本上,我会通过switch语句将当前选项卡的int值转换为mTab。我想这也意味着我不再需要mTab构造函数、getValue等了,至少出于这个目的?是的,你可以不用getValue,而使用每个枚举中已经可用的ordinal方法。这个问题太老了,但我希望我的评论能帮到一些人。在Android中不建议使用枚举,最好使用int常量。特别是对于这个问题,int常量比enum更好。此外,我们还可以使用这里描述的IntDef注释