3

我在 android 中使用 DataBinding,我有一个自定义视图:CarouselView

我为此编写了一个绑定适配器:

@BindingAdapter("onClick")
fun setOnClick(carouselView: CarouselView, onClick: (position: Int) -> Unit) {
    carouselView.setImageClickListener { position ->
        onClick.run(position)
    }
}

在xml中:

<com.synnapps.carouselview.CarouselView
            android:id="@+id/carouselView"
            ...
            app:onClick="@{(p) -> vm.onAdsClicked(p)}"/>

但它不编译。所以我在 Stackoverflow 中看到了这个答案。但我的问题是我不能使用 Runnable 代替 kotlin hoc 函数,因为我需要传递一个参数来运行。

我该如何解决?

4

2 回答 2

9

如果可以的话,我遇到了同样的问题(在 a 的 HOF 中传递一个参数BindingAdapter)并提出了一个更优雅的解决方案。您确实可以完成这项工作,您只需首先将 HOF 定义为变量。

视图模型:

val onAdsClicked = fun(position: Int) {
// Do stuff
}

XML:

<com.synnapps.carouselview.CarouselView
            android:id="@+id/carouselView"
            ...
            app:onClick="@{vm.onAdsClicked}"/>

绑定适配器:

@BindingAdapter("onClick")
fun setOnClick(carouselView: CarouselView, onClick: (position: Int) -> Unit) {
    carouselView.setImageClickListener { position ->
        onClick(position)
    }
}
于 2019-03-05T11:00:52.833 回答
3

从 hoc func 切换到此自定义视图的侦听器对我有用:

import com.synnapps.carouselview.ImageClickListener

@BindingAdapter("onClick")
fun setOnClick(carouselView: CarouselView, imageClickListener: ImageClickListener) {
    carouselView.setImageClickListener(imageClickListener)
}
于 2019-02-13T15:05:29.543 回答