我在android中使用DataBinding,并且有一个自定义 View :CarouselView

我为此写了一个绑定(bind)适配器:

@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中看到了this的答案。但是我的问题是我不能使用Runnable代替kotlin hoc函数,因为我需要通过一个参数来运行。

我该如何解决?

最佳答案

如果可以的话,我遇到了同样的问题(在BindingAdapter中的HOF内部传递了一个参数),并提出了一个更优雅的解决方案。您可以使确实起作用,您只需要先将HOF定义为变量即可。

ViewModel:

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

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

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

08-18 12:22