Estoy usando DataBinding en Android y tengo una vista personalizada: CarouselView
Escribí un adaptador vinculante para eso:
@BindingAdapter("onClick") fun setOnClick(carouselView: CarouselView, onClick: (position: Int) -> Unit) { carouselView.setImageClickListener { position -> onClick.run(position) } }Y en el xml:
<com.synnapps.carouselview.CarouselView android:id="@+id/carouselView" ... app:onClick="@{(p) -> vm.onAdsClicked(p)}"/>Pero no compila. Así que vi esta respuesta en Stackoverflow. Pero mi problema es que no puedo usar Runnable en lugar de la función kotlin hoc porque necesito pasar un parámetro para que funcione.
¿Cómo puedo solucionar eso?
Si puedo, tuve el mismo problema (pasar un parámetro dentro de un HOF en un BindingAdapter ) y se me ocurrió una solución más elegante. De hecho, puede hacer que esto funcione, solo necesita definir el HOF como una variable primero.
Ver modelo:
val onAdsClicked = fun(position: Int) { // Do stuff }XML:
<com.synnapps.carouselview.CarouselView android:id="@+id/carouselView" ... app:onClick="@{vm.onAdsClicked}"/>Adaptador de enlace:
@BindingAdapter("onClick") fun setOnClick(carouselView: CarouselView, onClick: (position: Int) -> Unit) { carouselView.setImageClickListener { position -> onClick(position) } }Cambiar de la función hoc al oyente de esta vista personalizada funcionó para mí:
import com.synnapps.carouselview.ImageClickListener @BindingAdapter("onClick") fun setOnClick(carouselView: CarouselView, imageClickListener: ImageClickListener) { carouselView.setImageClickListener(imageClickListener) }