개요

체크박스, 토글(ToggleButton), 스위치(Switch)는 모두 사용자 인터페이스에서 상태를 나타내거나 설정할 때 사용하는 UI 요소들로, 선택 여부에 따라 다른 동작을 할 수 있습니다. 이들은 모두 setOnCheckedChangeListener를 사용하여 상태 변화를 감지하고, 그에 따라 원하는 동작을 실행하는 방식이 동일합니다.

체크박스 예제 코드

import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.example.myapplication.databinding.ActivityMainBinding // View Binding을 위한 import

class MainActivity : AppCompatActivity() {

    private lateinit var binding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater) // View Binding 초기화
        setContentView(binding.root)

        // 체크박스에 체크 변경 리스너 설정
        binding.appleCheckBox.setOnCheckedChangeListener { checkBox, isChecked ->
            updateSelectedFruits()
        }

        binding.bananaCheckBox.setOnCheckedChangeListener { checkBox, isChecked ->
            updateSelectedFruits()
        }

        binding.orangeCheckBox.setOnCheckedChangeListener { checkBox, isChecked ->
            updateSelectedFruits()
        }
    }

    private fun updateSelectedFruits() {
        val selectedFruits = mutableListOf<String>()

        // 각 체크박스의 선택 상태를 확인하여 선택된 과일을 리스트에 추가합니다.
        if (binding.appleCheckBox.isChecked) {
            selectedFruits.add("Apple")
        }
        if (binding.bananaCheckBox.isChecked) {
            selectedFruits.add("Banana")
        }
        if (binding.orangeCheckBox.isChecked) {
            selectedFruits.add("Orange")
        }

        // 선택된 과일을 TextView에 표시합니다.
        binding.selectedFruitsTextView.text = "선택한 과일: ${selectedFruits.joinToString(", ")}"
    }
}

설명

  • ActivityMainBinding: View Binding을 통해 생성된 클래스입니다. XML 레이아웃 파일의 ID를 사용하여 UI 요소에 쉽게 접근할 수 있게 해줍니다.
  • setOnCheckedChangeListener: 체크박스의 체크 상태가 변경될 때 호출되는 리스너를 추가합니다. 이 메서드의 매개변수로는 두 개의 값이 있습니다:
    • checkBox: 체크 상태가 변경된 체크박스입니다. 이 값을 통해 어떤 체크박스가 변경되었는지 알 수 있습니다.
    • isChecked: 체크박스의 현재 체크 상태입니다. true이면 체크되어 있고, false이면 체크되지 않은 상태입니다.
  • updateSelectedFruits: 선택된 체크박스의 상태를 확인하여 선택된 과일 목록을 업데이트하는 메서드입니다. 각 체크박스의 체크 상태를 확인하고, 선택된 과일을 리스트에 추가한 후, 최종적으로 선택된 과일을 TextView에 표시합니다.

토글 예제 코드

import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.example.myapplication.databinding.ActivityMainBinding

class MainActivity : AppCompatActivity() {

    private lateinit var binding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)

        // ToggleButton에 체크 변경 리스너 설정
        binding.toggleButton.setOnCheckedChangeListener { toggleButton, isChecked ->
            if (isChecked) {
                binding.toggleButton.textOn = "켜짐"
                binding.statusTextView.text = "Toggle ON"
            } else {
                binding.toggleButton.textOff = "꺼짐"
                binding.statusTextView.text = "Toggle OFF"
            }
        }
    }
}

설명

  • ToggleButton: 켜짐/꺼짐 상태를 가질 수 있는 버튼. isChecked 값에 따라 상태를 확인할 수 있습니다.
  • textOn, textOff: 버튼 내부의 텍스트를 지정합니다.
  • setOnCheckedChangeListener: ToggleButton의 상태가 변경될 때 호출되는 리스너. isChecked 값이 true면 ON, false면 OFF 상태를 나타냅니다.

스위치 예제 코드

import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.example.myapplication.databinding.ActivityMainBinding

class MainActivity : AppCompatActivity() {

    private lateinit var binding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)

        // Switch에 체크 변경 리스너 설정
        binding.switchButton.setOnCheckedChangeListener { switchButton, isChecked ->
            if (isChecked) {
                binding.statusTextView.text = "Switch ON"
            } else {
                binding.statusTextView.text = "Switch OFF"
            }
        }
    }
}

설명

  • Switch: 슬라이딩 형식의 스위치로 ON/OFF 상태를 나타냅니다.
  • setOnCheckedChangeListener: 스위치 상태가 변경될 때 호출되는 리스너로, isChecked 값에 따라 ON/OFF 상태를 처리할 수 있습니다.