Android Java:使用枚举
我想知道如何在Java中使用枚举。我正在为Android开发一个配方应用程序。我有一个屏幕,在TabHost中有四个选项卡,我想通过命名常量来引用它们,我认为最好通过枚举来实现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;
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注释