마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

한 버튼에서 여러개의 이벤트처리를 하려면 어떻게 해야하나요?

0 추천
안녕하세요 자바, 안드로이드 스튜디오 공부하고있는 학생입니다. 아직 초보라 질문 퀄리티가 떨어지는 점 양해 부탁 드립니다. 제가 한 버튼으로만 LED불빛 단계조절을 하려고 합니다. 처음 버튼 상태는 OFF이고 버튼을 누르면 1단계 그상태에서 한번더 누르면 2단계 이런식으로 버튼클릭할때마다 상태변화가 일어나게 하려고 합니다. 어떤식으로 해야하나요?
언니곰팅이 (120 포인트) 님이 2020년 10월 22일 질문

1개의 답변

0 추천

이벤트는 한개만 세팅이 가능하구요. 이벤트안에서 상태값을 가지고 동작을 수행하도록 하셔야 합니다. 가장 직관적인 방법은

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 이라는 디자인 패턴을 이용할 수도 있습니다. 이 부분은 여기서는 생략할게요.

spark (226,420 포인트) 님이 2020년 10월 22일 답변
...