2011-09-20 4 views
3

제 질문은 setOnTouchListener를 여러 번 호출하여 동일한 리스너 또는 다른 리스너를 사용하는 경우의 영향에 관한 것입니다.은 view.setOnTouchListener (리스너) 멀티 캐스트입니까? 어떻게 작동합니까?

view.setOnTouchListener (myListener);

나는 모션 이벤트의 myListener 클래스에서 "public boolean onTouch (View v, MotionEvent 이벤트)"메서드를 호출한다는 것을 알고 있습니다. 내가 이해할 수없는 것은 나중에 이것을 호출 할 때 일어나는 일입니다.

view.setOnTouchListener (myOtherListener);

myListener는 여전히 모션 이벤트를 수신합니까? 제가

view.setOnTouchListener (에 myListener)를 호출하는 경우에도

;

다시 한번 터치 이벤트마다 myListener.onTouch를 두 번 호출합니까? 마지막으로, 청취자로서 어떻게 탈퇴합니까?

나는 dev guide을 통해 살펴 봤지만,이 또는 유사한 setListeners가 어떻게 작동하는지 명시 적으로 밝혀 내지 못했다. 그러나 누구나 북마크를 편리하게 사용하거나이 작동 방식을 알고 있다면 감사 할 것입니다.

답변

10

일반적으로 함수는 "set"으로 시작하여 이전 수신기를 대체합니다. 리스너 등록을 취소하려면 view.setOnTouchListener(null);을 사용하십시오. 첨가제 논리가있는 경우

view.setOnTouchListener(myListener); 
/* myListener is active */ 
view.setOnTouchListener(myOtherListener); 
/* myListener is inactive, myOtherListener is active */ 
view.setOnTouchListener(myListener); 
/* myListener is active, myOtherListener is inactive */ 

, 당신은 일반적으로 함수 이름에 add 또는 register 접두사를 볼 수 있습니다. 예 : TextView.addTestChangedListener()Context.registerReceiver().

관련 문제