Как запустить функцию в xml из viewmodel? Android, Kotlin, привязка данных - PullRequest
0 голосов
/ 03 мая 2020

Я пытаюсь запустить просмотр анимации. Когда я набираю текст в TextInputEditText, представление должно исчезнуть, но я получаю сообщение об ошибке:

"/ app / build / generate / source / kapt / debug /.../ MixerSimpleFragmentBindingImpl. java: 1416 : ошибка: отсутствует оператор возврата} ".

BindingAdapters.kt

@BindingAdapter("textChangedListener")
fun onTextChanged(et: EditText, callback: () -> Unit) {
   et.addTextChangedListener(object : TextWatcher {
      override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {
         callback.invoke()
      }

      override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {}
      override fun afterTextChanged(s: Editable) {}
    })
}

SimpleMixerViewModel.kt

class SimpleMixerViewModel : ViewModel() {
   val isVisible: MutableLiveData<Boolean> = MutableLiveData(false)
   ....

   fun click() {
        isVisible.value = true
    }

   fun typing(){
        isVisible.value = false
    }
}

mixer_simple_fragment. xml

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        xmlns:tools="http://schemas.android.com/tools">
<data>
<variable name="simpleMixerViewModel" type="....SimpleMixerViewModel"/>
</data>
....
<com.google.android.material.textfield.TextInputEditText
      app:textChangedListener="@{()-> simpleMixerViewModel.typing()}"
      />

<com.google.android.material.button.MaterialButton
      android:onClick="@{() -> simpleMixerViewModel.click()}"
      />

<androidx.cardview.widget.CardView
    isVisible="@{simpleMixerViewModel.isVisible}">
</androidx.cardview.widget.CardView>
</layout>

забавный щелчок () работает.

забавный набор текста () не работает

1 Ответ

0 голосов
/ 09 мая 2020

Вы должны использовать интерфейс вместо kotlin lamda в вашем привязывающем адаптере.

...