我在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)
}
}