Eri*_*ber 14 data-binding android higher-order-functions kotlin
我正在尝试使用Kotlin/Android数据绑定尝试将函数作为绑定适配器中的参数.此示例代码e: error: cannot generate view binders java.lang.StackOverflowError在构建时抛出,而日志中没有其他有用信息.
这是我的绑定适配器:
@JvmStatic
@BindingAdapter("onDelayedClick")
fun onDelayedClick(view: View, function: () -> Unit) {
// TODO: Do something
}
Run Code Online (Sandbox Code Playgroud)
XML:
<View
android:id="@+id/test_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:onDelayedClick="@{() -> viewModel.testFunction()}"/>
Run Code Online (Sandbox Code Playgroud)
我的ViewModel中的方法和方法:
fun testFunction() = Unit
Run Code Online (Sandbox Code Playgroud)
我一直在努力解决这个问题,而且我尝试过的任何工作都没有,所以任何帮助都会受到赞赏.
使用function: Runnable代替function: () -> Unit。
Android的数据绑定编译器会生成Java代码,您的kotlin函数的签名看起来像Java代码,void testFunction()因为从Java调用kotlin会将Unit调整为void。
另一方面,() -> Unit看起来kotlin.jvm.functions.Function0这是一个需要输入0并返回Unit.INSTANCE的函数。
如您所见,这两个函数签名不匹配,这就是编译失败的原因。
| 归档时间: |
|
| 查看次数: |
1111 次 |
| 最近记录: |