Andorid Kotlin
체크박스 리스너 등록
SimonLee
2024. 10. 2. 02:44
체크 박스의 경우 그룹이 없기 때문에 리니어 레이아웃을 사용한다.
리니어 레이아웃이 상단이고,
하위에 Buttons->CheckBox를 3개를 넣자.
리니어 레이아웃의 Constraint를 양방향으로 등록해주고,
리니어 레이아웃의 layout_width와 layout_height을 wrap_content로 설정하면 가운데 정렬이 된다.
레이아웃 오브젝트를 접근하기 위하여 뷰 바인딩을 사용한다.
(이전 챕터 참고)
check 박스 ID : checkApple, checkBanana, checkKiwi
첫번째 방법은 아래와 같이 checkApple 리스너를 등록한다.
with(binding) {
checkApple.setOnCheckedChangeListener {button, isChecked ->
if (isChecked) {
Log.d(TAG, "apple selection")
} else {
Log.d(TAG, "apple is not selected")
}
}
}
코드를 간결하기 하게 하기 위해 리스너를 변수로 만들어서 아래처럼 작성한다.
interface를 구현하는 방법은
구현하고자 하는 인터페이스 앞에 object : 를 붙이고 중괄호를 넣는다. { }
중괄호 안에서 control + 1을 누르면 오버라이딩된 함수 코드 정의부분이 생성된다.
val checkBoxListener2 = object : CompoundButton.OnCheckedChangeListener {
override fun onCheckedChanged(checkBox: CompoundButton?, isChecked: Boolean) {
when (checkBox?.id) {
R.id.checkApple -> {
Log.d(TAG, "apple ${isChecked}")
}
R.id.checkBanana -> {
Log.d(TAG, "banana ${isChecked}")
}
R.id.checkKiwi -> {
Log.d(TAG, "kiwi ${isChecked}")
}
}
}
}
with (binding){
checkApple.setOnCheckedChangeListener(checkBoxListener2)
checkBanana.setOnCheckedChangeListener(checkBoxListener2)
checkKiwi.setOnCheckedChangeListener(checkBoxListener2)
}
만일 인터페이스 내부에 구현해야 할 함수가 하나 밖에 없다면 오버라이딩 함수를 정의할 필요 없이
인터페이스 뒤에 바로 중괄호를 삽입한다.
val checkBoxListener = CompoundButton.OnCheckedChangeListener { checkBox, isChecked ->
when (checkBox.id) {
R.id.checkApple -> {
Log.d(TAG, "apple ${isChecked}")
}
R.id.checkBanana -> {
Log.d(TAG, "banana ${isChecked}")
}
R.id.checkKiwi -> {
Log.d(TAG, "kiwi ${isChecked}")
}
}
}
728x90