1

Android DataBinding / BindingAdapter错误:抛出错误:错误:将函数传递给BindingAdapter时缺少返回语句(块:()->单元)。

绑定适配器.kt

@BindingAdapter("click")
fun LottieAnimationView.click(block: () -> Unit) {
    setOnClickListener {
        block()
    }
}

activity_main.xml

<data>
    <variable
        name="viewModel"
        type="com.veldan.ViewModel" />
</data>

<View
        android:id="@+id/view"
        click="@{() -> viewModel.viewFun()}"
        android:layout_width="0dp"
        android:layout_height="0dp"   />

<View
        android:id="@+id/view"
        click="@{() -> viewModel.viewFun()}"
        android:layout_width="0dp"
        android:layout_height="0dp"   />

视图模型.kt

class ViewModel() {
     viewFun(){
        // logic
     }
}
4

1 回答 1

1

解决方案 1:

使用字段语法


  • 函数语法:❌</li>

| 点击 = "@{ () -> viewModel.viewFun() }"

  • 字段语法:✅</li>

| 点击 = "@{ viewModel.viewFun }"


解决方案 2:

使用Lambda

| 视图模型.kt

class ViewModel() {
    val viewFun: () -> Unit = {
        // logic
     }
}

Lambda - 使用参数阻塞时效果很好。

| 带参数的块

@BindingAdapter("click")
fun LottieAnimationView.click(block: (Param1, Param2, ...) -> Unit) {
    setOnClickListener {
        block()
    }
}

于 2021-05-05T15:29:40.090 回答