2013-02-22 20 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