Saya ingin menerapkan tombol sakelar, android.widget.Switch (tersedia dari API v.14).
<Switch
android:id="@+id/switch1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Switch" />
Tapi saya tidak yakin bagaimana cara menambahkan pendengar acara untuk tombol tersebut. Haruskah itu menjadi pendengar "onClick"? Dan bagaimana saya tahu jika itu diaktifkan "on" atau tidak?
Jawaban:
Alihkan
CompoundButton
atribut bawaan , jadi saya akan merekomendasikan OnCheckedChangeListenersumber
OnCLick
, switch tidak punyaOnChange
! Tim Google yang dirancang dengan baik!Gunakan cuplikan berikut untuk menambahkan Alihkan ke tata letak Anda melalui XML:
Kemudian dalam metode onCreate Aktivitas Anda, dapatkan referensi ke Switch Anda dan atur OnCheckedChangeListener:
sumber
Bagi mereka yang menggunakan Kotlin, Anda dapat mengatur pendengar untuk beralih (dalam hal ini memiliki ID
mySwitch
) sebagai berikut:isChecked
benar jika saklar saat ini dicentang (ON), dan false jika tidak.sumber
Tentukan tata letak XML Anda:
Kemudian buat sebuah Aktivitas
======== Untuk di bawah API 14 gunakan SwitchCompat =========
XML
Aktivitas
sumber
Tata letak untuk beralih widget adalah sesuatu seperti ini.
Di kelas Activity, Anda bisa membuat kode dengan dua cara. Tergantung pada penggunaan Anda dapat kode.
Jalan Pertama
Cara kedua
sumber
Anda bisa menggunakan DataBinding dan ViewModel untuk acara Change Checked Change
sumber
ada dua cara,
menggunakan xml onclick view Tambahkan Switch dalam XML seperti di bawah ini:
Di Kelas YourActivity (Misalnya MainActivity.java)
Tambahkan Switch in XML seperti di bawah ini:
Di Kelas YourActivity (Misalnya MainActivity.java)
sumber
Solusi saya, menggunakan a
SwitchCompat
dan Kotlin. Dalam situasi saya, saya perlu bereaksi terhadap perubahan hanya jika pengguna memicu melalui UI. Bahkan, saklar saya bereaksi terhadapLiveData
, dan ini membuat keduanyasetOnClickListener
dansetOnCheckedChangeListener
tidak dapat digunakan.setOnClickListener
sebenarnya bereaksi dengan benar terhadap interaksi pengguna, tetapi itu tidak dipicu jika pengguna menyeret ibu jari melintasi sakelar.setOnCheckedChangeListener
di ujung yang lain dipicu juga jika sakelar dimatikan secara terprogram (misalnya oleh pengamat). Sekarang dalam kasus saya saklar hadir pada dua fragmen, dan onRestoreInstanceState akan memicu dalam beberapa kasus saklar dengan nilai lama menimpa nilai yang benar.Jadi, saya melihat kode SwitchCompat, dan mampu meniru perilakunya dengan sukses dalam membedakan klik dan seret dan menggunakannya untuk membangun daftar sentuh kustom yang berfungsi sebagaimana mestinya. Kita mulai:
Bagaimana cara menggunakannya:
pendengar sentuh aktual yang menerima lambda dengan kode untuk dieksekusi:
Demi kelengkapan, beginilah tampilan pengamat untuk negara
switchstate
(jika Anda memilikinya):sumber
Di Kotlin:
sumber