Связывание данных: ObservableField со значением лямбда не компилируется

Я пытаюсь определить видимость представления, вычисляя lambda, который принимает один параметр в качестве аргумента. Я использую Kotlin , кстати.

В моей ViewModel меня есть:

  val customerPropVisibility: ObservableField<(KProperty1<Customer, *>) -> Int> = ObservableField( { _ -> // body of the lambda }) 

Выражение для View выглядит следующим образом:

  android:visibility="@{vm.customerPropVisibility.invoke(title)}" 

vm и title должным образом объявляются переменными в теге данных макета.

При компиляции я получаю две ошибки:

1) несовместимые типы: объект не может быть преобразован в Function1

2) несовместимые типы: объект не может быть преобразован в Integer

Существует только одна ошибка первого типа и несколько ошибок второго типа. Количество ошибок второго типа совпадает с количеством вызовов lambda в XML-файле макета.

Мои попытки решить проблему:

Очевидно, что ошибка типа 1 может быть решена путем переопределения метода get() ObservableField (что делает метод явно возвращать Function1 ). Это работает, но является уродливым и должно выполняться компилятором, когда он указывает тип для customerPropVisibility . Определенно, здесь что-то не так.

Ошибка типа 2 является для меня загадкой, потому что тип функции (моя лямбда) явно возвращает Int.

Я предполагаю, что он имеет какое-то отношение к взаимодействию Kotlin / Java.

Если вы столкнулись с одной и той же проблемой, пожалуйста, поделитесь опытом ее решения.

РЕДАКТИРОВАТЬ:

Поскольку эта ошибка еще не решена, я использую несколько иной подход для достижения того же результата:

Вместо того, чтобы установить значение ObservableField в лямбда, я установил его в функцию reference ( ::getVisibility ) следующим образом:

 fun getVisibility(prop: KProperty1<*, *>): Int = propVisibilityValues[prop] ?: View.GONE val propVisibilityGetter = ObservableField(::getVisibility) 

И всякий раз, когда изменяется propVisibilityValues я уведомляю propVisibilityGetter :

 private val propVisibilityValues = ObservableArrayMap<KProperty1<*, *>, Int>().apply { addOnMapChangedCallback(object : ObservableMap.OnMapChangedCallback<ObservableMap<KProperty1<*, *>, Int>, KProperty1<*, *>, Int>() { override fun onMapChanged(p0: ObservableMap<KProperty1<*, *>, Int>?, p1: KProperty1<*, *>?) { propVisibilityGetter.notifyChange() } }) } 

В XML-макете выражение привязки выглядит так:

 android:visibility="@{vm.propVisibilityGetter.call(title)}" 

Общий результат: беспорядочный в модели просмотра, но чистые выражения привязки.