Intereting Posts
MyBatis с неизменяемыми классами данных в Котлине Выделение синтаксиса для файлов сценариев Kotlin в Idea Intellij IDEA Kotlin Android Theme.AppCompat Ресурс не найден Изображение существует, но не null, но я получаю исключение NullPointerException Как преобразовать цифру Char (0-9) в числовое значение? Почему нажатие на элементы RecyclerView возвращает неверный идентификатор элемента? Параллельные сопрограммы Kotlin Как сделать работу @Autowired в обычном классе? Объединение / объединение классов данных в Котлин андроид, получивший манифест слияния с ошибкой после обновления до новой версии gradle Неразрешенная ссылка: T Вертикальная вертикальная (Vertical) Vert.x конфигурация JSON / YAML (предпочтительнее для каждой среды) Замена сбора потока в собственном решении Kotlin У Kotlin Android Extensions кешируются синтетические свойства или каждый раз, когда он вызывает findViewById ()? Запуск тестов из Android Studio IDE не восстанавливает чистый библиотечный модуль Java

Android DataBinding: @BindingAdapter в Kotlin не распознает lambdas

Это мой BindingAdapter :

 @BindingAdapter(value = *arrayOf("bind:commentsAdapter", "bind:itemClick", "bind:avatarClick", "bind:scrolledUp"), requireAll = false) fun initWithCommentsAdapter(recyclerView: RecyclerView, commentsAdapter: CommentsAdapter, itemClick: (item: EntityCommentItem) -> Unit, avatarClick: ((item: EntityCommentItem) -> Unit)?, scrolledUp: (() -> Unit)?) { //Some code here } 

initWithCommentsAdapter – это функция верхнего уровня

Это мой макет (существенная часть):

 <layout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:bind="http://schemas.android.com/apk/res-auto"> <data> <variable name="viewModel" type="some.example.path.CommentsViewModel"/> <variable name="commentsAdapter" type="some.example.path.CommentsAdapter"/> </data> <android.support.v7.widget.RecyclerView ... bind:avatarClick="@{(item) -> viewModel.avatarClick(item)}" bind:itemClick="@{viewModel::commentClick}" bind:commentsAdapter="@{commentsAdapter}" bind:isVisible="@{viewModel.commentsVisibility}" bind:scrolledUp="@{() -> viewModel.scrolledUp()}" /> </layout> 

Когда я назначаю лямбда с вызовом метода kotlin в макете, у меня такая ошибка при построении:

 e: java.lang.IllegalStateException: failed to analyze: java.lang.RuntimeException: Found data binding errors. ****/ data binding error ****msg:cannot find method avatarClick(java.lang.Object) in class some.example.path.CommentsViewModel ****\ data binding error **** 

или если я назначаю метод по ссылке:

 e: java.lang.IllegalStateException: failed to analyze: java.lang.RuntimeException: Found data binding errors. ****/ data binding error ****msg:Listener class kotlin.jvm.functions.Function1 with method invoke did not match signature of any method viewModel::commentClick file:C:\Android\Projects\...\fragment_comments.xml loc:70:12 - 83:17 ****\ data binding error **** 

Но у меня есть такие методы с правильным типом, а не с Object

Вопрос

Как я могу назначить лямбда Kotlin для пользовательского @BindingAdapter в Kotlin в макете?

редактировать

Соответствующая часть viewModel:

 class CommentsViewModel(model: CommentsModel): BaseObservable() { //Some binded variables here ... fun commentClick(item: EntityCommentItem) { //Some code here } fun avatarClick(item: EntityCommentItem) { //Some code here } fun scrolledUp() { //Some code here } ... } 

Связывание переменных работает отлично