数据绑定:具有lambda值的observeField不';不编译

数据绑定:具有lambda值的observeField不';不编译,lambda,kotlin,android-databinding,kotlin-interop,Lambda,Kotlin,Android Databinding,Kotlin Interop,我试图通过计算以一个参数作为参数的lambda来定义视图的可见性我正在使用Kotlin,顺便说一句 在我的视图模型中我有: val customerPropVisibility: ObservableField<(KProperty1<Customer, *>) -> Int> = ObservableField( { _ -> // body of the lambda }) vm和title

我试图通过计算以一个参数作为参数的lambda来定义
视图的可见性我正在使用Kotlin,顺便说一句

在我的
视图模型中
我有:

    val customerPropVisibility: ObservableField<(KProperty1<Customer, *>) -> Int> = ObservableField(
        { _ ->
            // body of the lambda
        })
vm
title
在布局的
data
标记中正确声明为变量

在编译时,我遇到两个错误:

1)不兼容类型:无法将对象转换为Function1

2)不兼容类型:无法将对象转换为整数

第一类错误只有一个,第二类错误有几个。第二种类型的错误数与布局xml文件中lambda的调用数相同

我解决问题的尝试:

显然,类型1的错误可以通过覆盖
observefield
get()
方法来解决(使该方法显式返回
Function1
)。这是可行的,但很难看,应该由编译器在推断
customerPropVisibility
的类型时执行当然,这里出了点问题。

类型2的错误对我来说是个谜,因为函数类型(my lambda)显式返回Int

我认为这与Kotlin/Java互操作性有关

如果你偶然发现了同样的问题,请分享解决它的经验

编辑:

由于此错误尚未解决,我使用稍微不同的方法来实现相同的结果:

我没有将
observeField
的值设置为lambda,而是将其设置为函数引用(
::getVisibility
),如下所示:

在XML布局文件中,绑定表达式如下所示:

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

总体结果:视图模型凌乱,但绑定表达式干净。

它应该可以工作,所以我为此提出了一个错误:谢谢你让我不再拔出更多的头发。我在编辑中发布了一个变通方法。
fun getVisibility(prop: KProperty1<*, *>): Int = propVisibilityValues[prop] ?: View.GONE
val propVisibilityGetter = ObservableField(::getVisibility)
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()
        }
    })
}
android:visibility="@{vm.propVisibilityGetter.call(title)}"