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

데이터바인딩 클릭이벤트 중복방지 할 수 있을까요?

0 추천
안녕하세요 요즘 데이터바인딩에 빠져있는 개발자입니다.

이제 어느정도 익숙해져서 코드도 깔끔해지는중인데

 

질문제목처럼 클릭이벤트 중복때문에 몇일째 앓고 있습니다 ㅠㅠ.

질문은

<Button

 onClick="@{()->handler.onClick()}"/>

이렇게 xml에 정의해두고 버튼을 클릭하면 핸들러 클래스의 아래 메서드가 호출되잖아요

public void onClick(){

}

다른 경우에는 위와 같이 써도 문제가 없는데 버튼을 눌렀을때 화면전환이라던가 서버통신을 할때 문제가 생깁니다.

 

버튼을 1초에 한 5번 광클했을때 메서드에 5번 호출되는거를 현재 막을수가 없습니다.

메서드 안에 boolean을 하나 두고 바꿔봐도 너무 빠르게 호출되면 조건문도 다 무시됩니다..

지금은 클래스 안에서 말고 최상단 Application에서 static boolean으로 변수 하나 두면 막히긴 하더군요.. 근데 이게 너무 불안해서 혹시 다른 방법이 없을까 하고 질문을 올립니다..

 

데이터바인딩 안쓸때에는

button.setOnClickListener( [new View.OnClick] 이 부분을 [new OnSingleClick] 과 같이 커스텀해서 시간제어를 하면 됬었는데. 위와 같이 메서드안에 다이렉트로 들어가는 경우에는 어떻게 막을지 모르겠습니다 ㅠㅠ

처음 들어오는순간 enable(false) 처리하더라도 일단 메서드 안에 5번이 호출된상태라 먹히진 않고 들어온상태에서 제어를 해야할 것 같은데 좋은 방법이 안떠올릅니다.. 혹시 도움주실분 있으신가요~?
익명사용자 님이 2019년 2월 7일 질문

2개의 답변

+1 추천
핸들러를  사용하시면 됩니다.

 

아랜 예제입니다.

handler.removeMessages(0); // 기존 클릭 이벤트 삭제

handler.sendDelayedMessage(0,1000);  // 약 1 초 후 클릭 이벤트를 핸들러로 넘겨 핸들러에서 클릭 이벤트를 처리하게 늦춤
익명사용자 님이 2019년 2월 7일 답변
0 추천

(v)->handler.onClick(v) 로 호출하고, v.enabled(false)를 해놓고, 필요할 때가되면 다시 true로 바꾸면 어떤가요?

쎄미 (162,410 포인트) 님이 2019년 2월 14일 답변
...