Gostaria de implementar um botão de opção, android.widget.Switch (disponível na API v.14).
<Switch
android:id="@+id/switch1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Switch" />
Mas não sei como adicionar um ouvinte de evento ao botão. Deveria ser um ouvinte "onClick"? E como eu saberia se está ativado ou não?
Respostas:
O switch herda
CompoundButton
os atributos, então eu recomendaria o OnCheckedChangeListenerfonte
OnCLick
, os interruptores não têmOnChange
! Equipe do Google bem projetada!Use o seguinte trecho para adicionar um switch ao seu layout via XML:
Em seguida, no método onCreate da sua atividade, obtenha uma referência ao seu Switch e defina seu OnCheckedChangeListener:
fonte
Para aqueles que usam o Kotlin, você pode definir um ouvinte para um comutador (neste caso, com o ID
mySwitch
) da seguinte maneira:isChecked
é verdadeiro se o comutador estiver marcado no momento (LIGADO) e falso caso contrário.fonte
Defina seu layout XML:
Em seguida, crie uma atividade
======== Para a API 14 abaixo, use SwitchCompat =========
XML
Atividade
fonte
O layout do widget Switch é mais ou menos assim.
Na classe Activity, você pode codificar de duas maneiras. Depende do uso que você pode codificar.
Primeira Via
Segunda via
fonte
Você pode usar o evento DataBinding e ViewModel for Change Checked Change
fonte
existem duas maneiras,
usando a visualização onclick xml Add Switch in XML, como abaixo:
Na classe YourActivity (por exemplo, MainActivity.java)
Adicione o Switch in XML como abaixo:
Na classe YourActivity (por exemplo, MainActivity.java)
fonte
Minha solução, usando
SwitchCompat
ae Kotlin. Na minha situação, eu precisava reagir a uma alteração apenas se o usuário a acionasse por meio da interface do usuário. Na verdade, meu interruptor reage a umLiveData
, e isso fez tantosetOnClickListener
esetOnCheckedChangeListener
inutilizável.setOnClickListener
de fato, reage corretamente à interação do usuário, mas não é acionado se o usuário arrastar o polegar pelo interruptor.setOnCheckedChangeListener
do outro lado, também é acionado se o comutador for alternado programaticamente (por exemplo, por um observador). Agora, no meu caso, o comutador estava presente em dois fragmentos, e assim onRestoreInstanceState acionaria em alguns casos o comutador com um valor antigo substituindo o valor correto.Então, observei o código do SwitchCompat e pude imitar seu comportamento com sucesso ao distinguir clique e arraste e o usei para criar um listener de toque personalizado que funcione como deveria. Aqui vamos nós:
Como usá-lo:
o ouvinte de toque real que aceita uma lambda com o código para executar:
Por uma questão de integridade, é assim que o observador do estado
switchstate
(se você o possui) se parece:fonte
Em Kotlin:
fonte