Функция высшего порядка в BindingAdapter - PullRequest
0 голосов
/ 13 февраля 2019

Я использую DataBinding в Android, и у меня есть собственное представление: 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.Но моя проблема в том, что я не могу использовать Runnable вместо kotlin hoc function, потому что мне нужно передать параметр в функцию.

Как я могу это решить?

Ответы [ 2 ]

0 голосов
/ 05 марта 2019

Если можно, у меня возникла та же проблема (передача параметра в HOF за BindingAdapter), и я нашел более элегантное решение.Вы можете действительно сделать эту работу, вам просто нужно сначала определить 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)
    }
}
0 голосов
/ 13 февраля 2019

Переключение с hoc func на слушателя этого пользовательского представления работало для меня:

import com.synnapps.carouselview.ImageClickListener

@BindingAdapter("onClick")
fun setOnClick(carouselView: CarouselView, imageClickListener: ImageClickListener) {
    carouselView.setImageClickListener(imageClickListener)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...