Android Java: использование перечислений - PullRequest
2 голосов
/ 10 августа 2011

Мне интересно, как использовать перечисления в 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 я бы хотел пункт меню под названием «Добавить изображение».), вот так

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.

Ответы [ 2 ]

4 голосов
/ 10 августа 2011

Вы можете добавить метод, как показано ниже в вашем перечислении 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:
     ..
     ...

}
1 голос
/ 10 августа 2011

Переменные enum могут быть помещены непосредственно в операторы switch в Java.Однако я обеспокоен тем, что enum может быть не самым подходящим вариантом в этом случае, потому что каждая из ваших вкладок делает что-то свое: лучше подойдет оформление или создание подкласса imho.Из того, что я узнал от Джоша Блоха, если вам нужно добавить методы в перечисление, все они должны иметь одинаковые имена, например: операции над калькулятором.

Каждая буква является частью перечисления:

Menu v;
...
    switch (v)
    {
        case A:
           ...
        case B:
        default:
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...