У меня ошибка Котлина, говорящая
Expected 2 parameters of types android.widget.CompoundButton!, kotlin.Boolean
Красная строка squiggly находится на первом {
в коде ниже:
alarmSwitch.setOnCheckedChangeListener(CompoundButton.OnCheckedChangeListener() { fun onCheckedChanged(buttonView: CompoundButton, isChecked: Boolean) {
Я пытался:
buttonView: !CompoundButton,
(говорит «Ожидание запятой или)»)
buttonView: CompoundButton!,
(говорит «Неожиданный токен»)
buttonView!: CompoundButton,
(говорит «Ожидание запятой или)»)
!buttonView: CompoundButton,
(говорит «Ожидание запятой или)»)
buttonView: CompoundButton?,
(говорит «Ожидаемые 2 параметра типов android.widget.CompoundButton !, kotlin.Boolean»)
Официальные документы Котлин говорят:
Обозначения для типов платформ
Как упоминалось выше, типы плат не могут быть указаны явно в программе, поэтому для них не существует синтаксиса на языке. Тем не менее, компилятор и IDE должны иногда отображать их (в сообщениях об ошибках, информации о параметрах и т. Д.), Поэтому для них есть мнемоническая нотация:
T! означает «T или T?»,
(Mutable) Коллекция! означает, что «Java-коллекция T может быть изменчивой или нет, может быть нулевой или нет»,
- Массив <(out) T>! означает «массив Java из T (или подтип T), обнуляемый или недействительный»
Я не совсем понимаю, что говорят документы. Как я могу исправить эту ошибку?
Мне кажется, вам нужно ключевое слово object ( object:
которое необходимо для создания объекта анонимного класса.
См. Объявление объекта
Попробуй это:
alarmSwitch.setOnCheckedChangeListener(object:OnCheckedChangeListener() { fun onCheckedChanged(buttonView:CompoundButton, isChecked:Boolean) { // whatever... } })
Надеюсь это поможет
Мы также можем упростить код, используя выражение лямбда
alarmSwitch.setOnCheckedChangeListener { buttonView, isChecked -> /* whatever...*/ }
https://antonioleiva.com/functional-programming-android-kotlin-lambdas/