Switch나 ToggleButton 같은 CompoundButton의 구현체를 다루다보면 클릭할때 알아서 ON과 OFF이벤트를 발생시킵니다.
문제는 스위치 버튼클릭시에만 이벤트를 발생시는건(예를들어 클릭하고 ON이 되었는데 팝업에 따라 OFF로 변한다던가) 어떻게 만들수있을지 한번 고려해볼 문제입니다.
onClickListener()
를 사용시, 정말로 클릭에만 대응이됩니다만, drag
를 해서 ON, OFF가 가능한 Compound Button 특성상 반쪽짜리 대응이 되고 맙니다.
하지만 OnCheckedChangeListner에서 처리시, checked가 변할때마다 콜백리스너가 실행되기 때문에 무한 반복이 될수도 있습니다.
어떻게 할수있을까요?
다행인것은 compoundButton에 isPressed라는 프로퍼티를 통해 해결이 가능합니다.
mySwitch.setOnCheckedChangeListener { compoundButton, isChecked ->
if (compoundButton?.isPressed == true)
viewModel.onMySwitchChanged(isChecked)
}