체크 박스의 경우 그룹이 없기 때문에 리니어 레이아웃을 사용한다.
리니어 레이아웃이 상단이고,
하위에 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}")
}
}
}
'Andorid Kotlin' 카테고리의 다른 글
GLSurfaceView 배경 투명으로 하는 법 (1) | 2024.10.05 |
---|---|
리사이클 레코드 보여주기 (0) | 2024.10.02 |
액티비티간 데이터 주고 받기 (0) | 2024.10.02 |
common 위젯 사용 (seekBar, toggle, progress bar, spiner (0) | 2024.10.02 |
layout에 생성한 오브젝트 접근 방법 (0) | 2024.10.01 |