2013-02-22 2 views
1

Мне нужен способ получить следующее/предыдущее перечисление.
Моя проблема заключается в том, что я не могу перебирать обычным способом:Android Получить следующий или предыдущий Enum

for(Mode m: Mode.values()) { 
    . . . 
} 

Мне нужно, чтобы получить следующий перечисление внутри метода, каждый раз, когда он вызывается:
Обратите внимание, что Режим представляет собой систему Enum, поэтому Я не могу определить методы, если я не создаю свой собственный Enum, который является решением, но менее предпочтительным.

public class A { 

    private Mode m; 

    A() { 
     m = Mode.CLEAR; 
    } 

    ... 

    protected onClick(View v) { 
     ... 
     v.getBackground().SetColorFilter(R.color.azure, m); 
     m = m.next(); // <-- I need something like this 
     ... 
    } 

ответ

3
//Store these somewhere in your class 
Mode[] modes = Mode.values(); 
int modeCount = modes.length; 

protected void onClick(View v) { 
    //Get the next mode, wrapping around if you reach the end 
    int nextModeOrdinal = (m.ordinal() + 1) % modeCount; 
    m = modes[nextModeOrdinal]; 
} 
4

Реализуйте этот метод:

public static Mode nextMode(Mode mode) { 
    return (mode.ordinal() < Mode.values().length - 1) ? Mode.values()[mode.ordinal() + 1] : null; 
} 
+0

Вы уверены * порядковое() * получает заказ в * значений() *? Я знаю, что ordinal() дает порядок Enum, поскольку он написан в определении Enum, я не уверен, что значения() ограничены, чтобы возвращать тот же порядок Enums. – ilomambo

Смежные вопросы