Aprenda a usar o CheckBox no Android (Kotlin)

CheckBox

Conhecidos mundialmente como caixas de seleção, o checkbox permite que o usuário selecione uma ou mais opções de um conjunto.

No caso dele, ele só consegue armazenar dois valores, ou é true ou é false.

Este elemento pode ser criado usando a tag <Checkbox>:

<CheckBox
android:id="@+id/checkbox_on_off"
android:text="Meu CheckBox"
android:checked="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>

Manipulando um Checkbox

O processo de manipulação de um checkbox acontece de forma bem simples.

Observe abaixo como obtemos e configuramos algum valor booleano para ele:

val checkBox = findViewById<View>(R.id.checkbox_on_off) as CheckBox//Seleciona o elemento Checkbox pelo seu ID

Log.d("CheckBox", "${checkBox.isChecked}")//Aqui estamos recuperando o valor do checkbox (True se estiver marcado, false se não estiver)

checkBox.isChecked = false//Aqui estamos mudando o valor do checkbox para false (desmarcado)

Trabalhando com Eventos

Quando trabalhamos com o Checkbox conseguimos escutar os eventos que o usuário realiza nele, como o simples fato de clicar dentro dele.

Para escutar os eventos, você precisa dizer ao Checkbox que a classe atual se responsabiliza por responder e captar os eventos:

val checkBox = findViewById<View>(R.id.checkbox_on_off) as CheckBox//Seleciona o elemento Checkbox pelo seu ID

checkBox.setOnCheckedChangeListener(this)//Estamos definindo que a classe atual se responsabiliza por tratar todos os eventos do checkbox

Em seguida basta fazer a implementação da classe do CompoundButton na sua Activity da seguinte forma:

class MainActivity : AppCompatActivity(), CompoundButton.OnCheckedChangeListener {
...
}

E é claro, implementar os seus métodos obrigatórios:

override fun onCheckedChanged(button: CompoundButton?, isChecked: Boolean) {
TODO("Not yet implemented")
}

onCheckedChange: Método só é chamado quando o usuário interage com o Checkbox. 

É retornado dois parâmetros, o button que é a instância do objeto que foi clicado, e o isChecked que retorna um valor booleano, informando se o checkbox está marcado (true) ou desmarcado (false).

Conflito com Switch

Se você já passou pelo artigo que fala sobre SwitchCompact, você deve ter visto que tanto o elemento CheckBox quanto o elemento SwitchCompact, compartilham de um mesmo método de evento, o onCheckedChange.

Pode acontecer de você implementar tanto um Switch quanto um Checkbox na mesma tela, ocasionando a mesma chamada de função.

Para diferenciar e saber quando o usuário clicou no CheckBox ou no Switch, você pode diferencia-los por meio do parâmetro button da seguinte forma:

override fun onCheckedChanged(button: CompoundButton?, isChecked: Boolean) {
when(button.id){
R.id.checkbox_on_off -> {
//O que fazer quando o button for o checkbox
}
R.id.switch_on_off -> {
//O que fazer quando o button for um Switch
}
}
}

Caso existir mais de um checkbox, basta separa-los por ID e identifica-los como estamos fazendo no código acima.

Conclusão

Neste conteúdo você aprendeu a criar o elemento Checkbox.

Até o próximo conteúdo.