안드로이드

안드로이드의 Listener에서 setListener 와 addListener 의 차이

알통몬_ 2019. 5. 14. 12:18
반응형


공감 및 댓글은 포스팅 하는데

 아주아주 큰 힘이 됩니다!!

포스팅 내용이 찾아주신 분들께 

도움이 되길 바라며

더 깔끔하고 좋은 포스팅을 

만들어 나가겠습니다^^

 


안드로이드를 개발할 때 어떤 Listener는 setListener이고

어떤 Listener는 addListener인 것을 확인할 수 있습니다.

예를 들어 ClickListener는 setOnClickListener이지만

RecylerView의 ItemTouchListener는

addOnItemTouchListener를 통해 listener를 추가합니다.


위 두 타입의 리스너의 차이는 이름에서도 알 수 있듯

set은 기존에 다른 리스너가 이미 set 되어있다면

기존 리스너는 해제되고 가장 최근에 set 한 리스너로 대체됩니다.

하지만 add 가 붙은 경우는 계속해서 add가 되는 거죠

그래서 recyclerView에 addOnItemTouchListener로 같은

리스너를 어려개 add 할 경우 터치작업이 중복해서 일어납니다.

때문에 add 를 하고 다시 한 번 add를 해야한다면

꼭! remove를 먼저 해줘야 합니다.

ex)

binding.exampleViews.addOnItemTouchListener(itemTouchListener);
binding.exampleViews.removeOnItemTouchListener(itemTouchListener);

위처럼요.

recyclerView에 ItemDecoration을 추가할 때도 마찬가지입니다.

Decoration을 addItemDecoration으로 추가해주기 때문에

다시 한 번 추가해야한다면 

먼저 removeItemDecoration으로 

기존에 add한 Decoration을 제거한 후 

새로운 Decoration을 add 해주어야 합니다.

binding.questViews.removeItemDecoration(questDecoration);
binding.exampleViews.removeItemDecoration(examplesDecoration);
questDecoration = new ViewsDecoration(fromDpToPx(this, 190), QUEST_CNT);
binding.questViews.addItemDecoration(questDecoration);
int dp = EXAMPLES_CNT == 3 ? 57 : 18;
examplesDecoration = new ViewsDecoration(fromDpToPx(this, dp * 2), EXAMPLES_CNT);

제가 개발하면서 깨닭은 점은 간단히 포스팅해봤습니다.

감사합니다. 틀린 부분이 있다면 댓글로 마구마구 지적부탁드립니다.




반응형