Я пытаюсь связать следующие элементы:
xml:
<android.support.v7.widget.SwitchCompat
...
bind:onCheckedChanged="@{(isChecked) -> viewModel.onCheckedChanged(isChecked)}"
.../>
viewModel:
class MyViewModel() {
fun onCheckedChanged(isChecked: Boolean) {
...
}
}
с помощью BindingAdapter:
@BindingAdapter("onCheckedChanged")
fun bindOnCheckedChanged(view: SwitchCompat, onCheckedChanged: (Boolean) -> Unit) {
view.setOnCheckedChangeListener(
{ _, isChecked ->
if (view.isPressed) onCheckedChanged(isChecked)
}
)
}
Я получаю следующую ошибку:
ошибка привязки данных **** msg: невозможно найти метод onCheckedChanged (java.lang.Object) в классе MyViewModel
Похоже, что механизм связывания не распознает isChecked
как Boolean
.Я пытался принудительно набрать xml как isChecked:Boolean
, но получаю кучу разных ошибок.
Сейчас я заставил это работать, используя Any
вместо Boolean
, но я чувствую, что это неправильно:
@BindingAdapter("onCheckedChanged")
fun bindOnCheckedChanged(view: SwitchCompat, onCheckedChanged: (Any) -> Unit) {
...
и
fun onCheckedChanged(isChecked: Any) {
val isSwitchChecked = isChecked as? Boolean ?: return
...
Кто-нибудь знает, как заставить работать правильную сигнатуру функции?