我正在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中看到了this的答案。但是我的问题是我不能使用Runnable代替kotlin hoc函数,因为我需要通过参数来运行。
我该如何解决?
答案 0 :(得分:1)
如果可以的话,我遇到了同样的问题(在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)
}
}
答案 1 :(得分:0)
从hoc func切换到此自定义视图的侦听器对我来说很有效:
import com.synnapps.carouselview.ImageClickListener
@BindingAdapter("onClick")
fun setOnClick(carouselView: CarouselView, imageClickListener: ImageClickListener) {
carouselView.setImageClickListener(imageClickListener)
}