То, как я это сделал, заключается в следующем.Ваш метод будет соответствовать классу kotlin.jvm.functions.Function1
.поэтому идея состоит в том, чтобы объявить это в XML следующим образом:
<data>
<import type="kotlin.jvm.functions.Function1"/>
<import type="kotlin.Unit"/>
<variable
name="theMethod"
type="Function1<Integer, Unit>"/>
</data>
Это не выглядит красиво, но работает.Мы импортируем то, что хотим, а затем объявляем переменную связывания того типа, который нам нужен.Обратите внимание, что символ <
является недопустимым при попытке определить универсальные типы, поэтому мы используем <
.
Теперь он должен быть простым в использовании.Я делаю это так:
android:onClick="@{_ -> theMethod.invoke(someInt)}"
Подпись метода для onClick
требует, чтобы мы передали метод, который получает один параметр типа View
.Я не заинтересован в его использовании, поэтому я объявляю его как _
в лямбде, который я передаю onClick
.Затем внутри лямбды я вызываю нужный мне метод.
Я всегда стараюсь не помещать логику в XML, но я позволяю себе такие ярлыки, так как на самом деле не считаю их бизнесомлогика.
Надеюсь, это поможет.