이벤트는 한개만 세팅이 가능하구요. 이벤트안에서 상태값을 가지고 동작을 수행하도록 하셔야 합니다. 가장 직관적인 방법은
public static final int OFF = 1
public static final int LIGHT = 2
public static final int DARK = 2
public static final int NUMBER_OF_STATE = 3
private int clickCount = OFF;
ledButton.setOnClickListener {
adjustLed();
}
private void adjustLed() {
switch (getNextLedState()) {
case OFF: turnOffLed();
break;
case LIGHT:
makeLedLight();
break;
case DARK:
makeLedDark();
break;
}
}
/*
현재의 LED 상태구하기.
버튼 클릭할 때마다 clickCount를1씩 증가시킵니다.
총 3개의 상태를 가지므로 clickCount를 3으로 나누면 나머지가 0, 1, 2가 됩니다.
clickCount: ledState
0 = 0 % 3 = 0
1 = 1 % 3 = 1
2 = 2 % 3 = 2
3 = 3 % 3 = 0
4 = 4 % 3 = 1
5 = 5 % 3 = 2
따라서 이 나머지와 LED 상태를 정의한 상수를 비교해서 처리하시면 됩니다.
*/
private int getNextLedState() {
return ++clickCount % NUMBER_OF_STATE;
}
다른 방법으로는 enum 타입을 이용해서 처리하실 수도 있습니다.
public enum LedState {
OFF(LIGHT),
LIGHT(DARK),
DARK(OFF);
public final LedState nextState;
private LedState ( LedState nextState) {
this.nextState = nextState;
}
}
private LedState ledState = LedState.OFF;
ledButton.setOnClick() {
ledState = ledState.nextState;
// ledState값에 따라 처리.
}
좀 더 객체지향적인 방법으로는 State Pattern 이라는 디자인 패턴을 이용할 수도 있습니다. 이 부분은 여기서는 생략할게요.