我有一个 (position: Int) -> Unit
类型的变量,我想像这样从 xml 调用方法 android:onClick="@{theMethod.invoke(一些Int)}
这可能吗?那我该怎么做呢?
最佳答案
我的做法如下。您拥有的方法将对应于类 kotlin.jvm.functions.Function1
.所以我们的想法是在 XML 中这样声明:
<data>
<import type="kotlin.jvm.functions.Function1"/>
<import type="kotlin.Unit"/>
<variable
name="theMethod"
type="Function1<Integer, Unit>"/>
</data>
它看起来不漂亮,但它确实有效。我们导入我们想要的,然后声明我们想要的类型的绑定(bind)变量。请注意字符 <
在尝试定义泛型类型时是非法的,因此我们使用 <
.
现在应该很容易使用了。我喜欢这样做:
android:onClick="@{_ -> theMethod.invoke(someInt)}"
onClick
的方法签名要求我们传入一个方法,该方法接收一个类型为 View
的参数.我对使用它不感兴趣,所以我将其声明为 _
在 lambda 中我传递给 onClick
.然后在 lambda 中调用我想要的方法。
我总是努力不将逻辑放入 XML 中,但我允许自己使用这些快捷方式,因为我并不真正将它们视为业务逻辑。
希望对您有所帮助。
关于android - 我如何在 android 数据绑定(bind)中绑定(bind)和调用`function type`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54778874/