White Whale Studio

[Android] Event Listener (Handler)만들기 본문

IT Engineering/Android 혹은 Java

[Android] Event Listener (Handler)만들기

glorymind 2015. 5. 27. 13:21
반응형

C# 에서 이벤트 핸들러를 만들때는 아래와 같이


public delegate void OnClickEventHandler(bool _Click); // 핸들러를 선언하고


public event OnClickEventHandler OnClickEvent; // 해당 핸들러를 사용하는 이벤트를 또다시 선언합니다.


그리고 해당 클래스에서 사용할때는


if (OnClickEvent != null) OnClickEvent(_Click);


위와 같은 방식으로 이벤트에 파라미터를 넘기거나 해서 이벤트를 핸들링합니다.


안드로이드에서 사용하는 이벤트 리스너 또한 비슷합니다.

저같은 경우는 달력을 구성하는 MonthView 내에 DayView가 여러개 포함이 되는데 DayView에서 OnClickEvent를 설정하면

CustomView인 MonthView를 클릭했을 때 MonthView.OnClickEvent가 발생하는게 아니라 DayView.OnClickEvent가 발생해서

방법을 찾다가 찾은 방법입니다.

기본적으로 제공되는 이벤트가 아닌 경우에는 해당 방법을 쓰면 간단하게 해결가능할 듯합니다.


보통 Custom View를 만들었을때나 CallBack이 필요한 경우에 사용할수 있는데 사용법은 다음과 같습니다.


우선 Interface를 선언합니다.


// Event Handler
public interface SelectDayEventListener {
void OnDayTouchEvent(Date _selectedDate);
}

다음으로 Custom View에서 선언했던 이벤트 리스너를 변수로 등록합니다.
// Register Event Listener
private SelectDayEventListener mSelectEventListener;

다음으로는 외부에서 이벤트를 등록할 수 있도록 setEvent(여기서는 setOnDayTouchEvent)를 등록합니다.

외부에서는 CustomView.setOnDayTouchEvent 와 같이 호출해서 사용하겠지요.
public void setOnDayTouchEvent(SelectDayEventListener listener){
mSelectEventListener = listener;
}

C#에서 사용했던것 처럼 해당 함수가 Null인지 판단을 하고 클래스 내부에서 이벤트 발생시 정보를 넣어줄 코드를 작성하면

다음과 같습니다.

if(mSelectEventListener != null) mSelectEventListener.OnDayTouchEvent(selectedDate);
위와 같이 설정해 둔후

외부 클래스나 액티비티에서 해당 뷰에 대한 이벤트를 등록할 때는

mv = (MonthView) findViewById(R.id.mv_schedule);
mv.setOnDayTouchEvent(new MonthView.SelectDayEventListener() {
@Override
public void OnDayTouchEvent(Date _selectedDate) {

// 이벤트 수신
Toast.makeText(context, _selectedDate.toString(), Toast.LENGTH_SHORT).show();
}
});


반응형
Comments