2013-02-22 48 views
1

我需要一种方法来获取下一个/上一个枚举。
我的问题是,我不能重复的正常方式:Android获取下一个或上一个枚举

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

我需要一个方法内下一个枚举,每次调用时间:
注意模式是一个系统的枚举,因此我无法定义方法,除非我创建了自己的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定义中的,我不确定values()是否有界返回与Enums相同的顺序。 – ilomambo 2013-02-22 07:06:07