android - 我如何在 android 数据绑定(bind)中绑定(bind)和调用`function type`?

标签 android android-databinding

我有一个 (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&lt;Integer, Unit>"/>
</data>

它看起来不漂亮,但它确实有效。我们导入我们想要的,然后声明我们想要的类型的绑定(bind)变量。请注意字符 <在尝试定义泛型类型时是非法的,因此我们使用 &lt; .

现在应该很容易使用了。我喜欢这样做:

android:onClick="@{_ -> theMethod.invoke(someInt)}"

onClick 的方法签名要求我们传入一个方法,该方法接收一个类型为 View 的参数.我对使用它不感兴趣,所以我将其声明为 _在 lambda 中我传递给 onClick .然后在 lambda 中调用我想要的方法。

我总是努力不将逻辑放入 XML 中,但我允许自己使用这些快捷方式,因为我并不真正将它们视为业务逻辑。

希望对您有所帮助。

关于android - 我如何在 android 数据绑定(bind)中绑定(bind)和调用`function type`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54778874/

相关文章:

java - 安卓模拟器无法运行

android - ConstraintLayout 与 RelativeLayout 性能 2020

android - `bind` 中的 `inflate` , `setContentView` 和 `DataBindingUtil` 有什么区别

Android RecyclerView Adapter DataBinding - 找不到符号 {layout}BindingImpl

android - 使用 SharedPreferences 保存用户详细信息

java - 是否有可能在 Android 蓝牙和笔记本电脑蓝牙设备之间建立不安全的连接?

Android MaterialButton 在 XML 中设置检查数据绑定(bind)

android - 我应该将哪个 Okhttp.jar 版本与 retrofit-2.0.1.jar 一起使用?

Android如何处理mvvm架构中的recyclerview点击