RadioGroup의 생소한 동작

 

RadioGroup에서 처음 check를 호출하면 onCheckedChanged가 두 번 연속 호출되는 현상이 나타남.

동일 현상에 대한 SO 답변

소스코드를 보면 그렇게 동작하도록 되어있다고 함

http://www.grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.1.1_r1/android/widget/RadioGroup.java#RadioGroup.check%28int%29

실제로 따라가보니 리스너가 두 번 호출되는 플로우를 타고 있다.

의도대로 동작하게 하려면 RadioGroup이 아니라 RadioButton의 setchecked를 쓰라고 한다.

V에서 click 이벤트 발생 -> P에서 처리 -> P가 V를 업데이트 (click 한 상태로 변경)

이런 식으로 구현하려고 했지만 RadioButton이 그런 식으로 동작하도록 구현되어있지 않았다.

초기 상태는 버튼에 performClick을 호출하도록 구현했다. 이후부터 바뀌는 상태는 그냥 OnClickListener로 P에 전달만 하고 P가 따로 V를 업데이트해주진 않는다.

CheckBox와는 달리 toggle 속성이 없기 때문에 그냥 클릭 여부만 받아서 처리해도 무방하다.

토글 속성이 있었다면 이게 선택상태로 바뀌었는지 선택해제상태로 바뀌었는지 체크를 해야 상태가 꼬이지 않겠지만

Leave a Comment

Your email address will not be published. Required fields are marked *