Я хотел бы реализовать кнопку переключения, android.widget.Switch (доступно из API v.14).
<Switch
android:id="@+id/switch1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Switch" />
Но я не уверен, как добавить прослушиватель событий для кнопки. Должен ли это быть слушатель "onClick"? И как бы я узнал, включен он или нет?
Ответы:
Переключатель наследует
CompoundButton
атрибуты, поэтому я бы рекомендовал OnCheckedChangeListenerисточник
OnCLick
, переключателей нетOnChange
! Хорошо спроектированная команда Google!Используйте следующий фрагмент, чтобы добавить Switch к вашему макету через XML:
Затем в методе Activity вашего onCreate получите ссылку на ваш Switch и установите его OnCheckedChangeListener:
источник
Для тех, кто использует Kotlin, вы можете установить прослушиватель для коммутатора (в данном случае с идентификатором
mySwitch
) следующим образом:isChecked
Значение true, если в данный момент переключатель включен (ON), и false в противном случае.источник
Определите ваш XML-макет:
Затем создайте активность
======== Для API ниже 14 используйте SwitchCompat =========
XML
Деятельность
источник
Макет для виджета Switch выглядит примерно так.
В классе Activity вы можете кодировать двумя способами. Зависит от использования вы можете код.
Первый путь
Второй способ
источник
Вы можете использовать DataBinding и ViewModel для события Switch Checked Change
источник
Есть два пути,
используя представление XML onclick Add Switch в XML, как показано ниже:
В классе YourActivity (например, MainActivity.java)
Добавьте Switch в XML, как показано ниже:
В классе YourActivity (например, MainActivity.java)
источник
Мое решение, используя
SwitchCompat
и Kotlin. В моей ситуации мне нужно было реагировать на изменение, только если пользователь запустил его через пользовательский интерфейс. На самом деле, мой переключатель реагирует на aLiveData
, и это сделалоsetOnClickListener
иsetOnCheckedChangeListener
непригодным для использования.setOnClickListener
фактически корректно реагирует на взаимодействие с пользователем, но не срабатывает, если пользователь проводит пальцем по переключателю.setOnCheckedChangeListener
на другом конце также запускается, если переключатель переключается программно (например, наблюдателем). Теперь в моем случае переключатель присутствовал на двух фрагментах, и поэтому onRestoreInstanceState в некоторых случаях вызывал бы переключение со старым значением, перезаписывая правильное значение.Итак, я посмотрел код SwitchCompat и смог успешно имитировать его поведение при различении щелчков и перетаскиваний и использовал его для создания настраиваемого сенсорного прослушивателя, который работает как должен. Вот так:
Как это использовать:
фактический слушатель касания, который принимает лямбда с кодом для выполнения:
Ради полноты, вот так
switchstate
выглядел наблюдатель от государства (если он у вас есть):источник
В Котлине:
источник