[英]Higher order function in BindingAdapter
I am using DataBinding in android and I have a custom view: CarouselView 我在android中使用DataBinding,我有一个自定义视图: CarouselView
I wrote a binding adapter for that: 我写了一个绑定适配器:
@BindingAdapter("onClick")
fun setOnClick(carouselView: CarouselView, onClick: (position: Int) -> Unit) {
carouselView.setImageClickListener { position ->
onClick.run(position)
}
}
And in the xml: 并在xml中:
<com.synnapps.carouselview.CarouselView
android:id="@+id/carouselView"
...
app:onClick="@{(p) -> vm.onAdsClicked(p)}"/>
But it does not compile. 但它没有编译。 So I saw this answer in the Stackoverflow.
所以我在Stackoverflow中看到了这个答案。 But my problem is that I cannot use Runnable instead of kotlin hoc function because I need to pas a parameter to function.
但我的问题是我不能使用Runnable而不是kotlin hoc函数,因为我需要将参数传递给函数。
How can I solve that? 我怎么解决这个问题?
If I may, I had the same issue (passing a param inside a HOF in a BindingAdapter
) and came up with a more elegant solution. 如果可以的话,我有同样的问题(在
BindingAdapter
HOF传递给HOF)并提出了更优雅的解决方案。 You can indeed make this work, you just need define the HOF as a variable first. 你确实可以做到这一点,你只需要首先将HOF定义为变量。
ViewModel: 视图模型:
val onAdsClicked = fun(position: Int) {
// Do stuff
}
XML: XML:
<com.synnapps.carouselview.CarouselView
android:id="@+id/carouselView"
...
app:onClick="@{vm.onAdsClicked}"/>
BindingAdapter: BindingAdapter:
@BindingAdapter("onClick")
fun setOnClick(carouselView: CarouselView, onClick: (position: Int) -> Unit) {
carouselView.setImageClickListener { position ->
onClick(position)
}
}
Switching from hoc func to the the listener of this custom view worked for me: 从hoc func切换到此自定义视图的侦听器对我有用:
import com.synnapps.carouselview.ImageClickListener
@BindingAdapter("onClick")
fun setOnClick(carouselView: CarouselView, imageClickListener: ImageClickListener) {
carouselView.setImageClickListener(imageClickListener)
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.