Android DataBinding / BindingAdapter Error: { missing return statement }

551 Views Asked by At

Android DataBinding / BindingAdapter Error: An error is thrown: error: missing return statement when passing a function to BindingAdapter (block: () -> Unit).

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"   />

ViewModel.kt

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

There are 1 best solutions below

0
On

SOLUTION 1:

Use Field syntax


  • Function syntax: ❌

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

  • Field syntax: ✅

| click = "@{ viewModel.viewFun }"


SOLUTION 2:

Use Lambda

| ViewModel.kt

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

Lambda - works well when block with parameters.

| block with parameters

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