Custom View를 만들거나 비동기로 callback return을 받기 위해서는 해당 custom 객체에 이벤트 리스너를 만들어 줘야 한다.
(그래야 이벤트를 주고 받을 수 있으니깐...) 일단 Custom View에 이벤트 리스너 Interface를 선언. 인터페이스 내의 함수에는 event받을 때 처리하고자 하는 파라미터들을 기입해도 상관없다.
public interface SampleEventListener{ void onReceivedEvent(); }
그 후엔 이제 Custom View에서 interface로 선언했던 이벤트 리스너를 변수로 등록한다.
private SampleEventListener mSampleEventListener;
외부에서 이벤트를 등록할 수 있도록 setEvent 함수를 만들어 준다.
public void setOnSampleReceivedEvent(SampleEventListener listener){ mSampleEventListener = listener; }
Custom View에서는 이제 이벤트를 호출하고 싶은 경우 mSampleEventListener.onReceivedEvent() 함수를 호출하면 된다.
그러면 이벤트를 등록한 쪽에서는 Custom View에서 호출한 이벤트를 받을 수 있게 된다. (이벤트 호출 시 주의할 점이 반드시 mSampleEventListener가 null인지 아닌지를 체크한 후 onReceivedEvent() 함수를 호출해야 한다. (null일 경우 함수 호출하면 당연히 에러...)
이벤트를 등록한 쪽에서는 다음과 같은 형태로 이벤트를 수신하게 된다.
CustomView view = new CustomView(this); view.setOnSampleReceivedEvent(new CustomView.SampleEventListener(){ @Override public void onReceivedEvent(){ // 이벤트 수신 } });
출처: http://yujuwon.tistory.com/entry/안드로이드-이벤트-리스너-만들기 [Ju Factory] |