Kotlin “toString()” 在 Android 数据绑定中不可用

Kotlin “toString()” Not Available in Android DataBinding

刚学习DataBinding发现Kotlin强大的内置toString()不可用:

<layout 
    xmlns:android="http://schemas.android.com/apk/res/android">

    <data>
        <variable
            name="student"
            type="com.example.databindingtest2.Student" />

    </data>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@{student.name}"
        android:textColor="@android:color/black"
        android:textSize="30sp" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="16dp"
        android:text="@{student.age.toString()}"    //doesn't work, age is integer
        android:textColor="@android:color/black"
        android:textSize="30sp" />

</layout>

我知道 String.valueOf() 可以,但这不是 Kotlin 的方式。任何帮助将不胜感激。

doesn't work, age is integer

Java 或 Kotlin 中都没有名为 integer 的类型。我猜 age 是 Kotlin Int.

cannot find method toString() in class int

数据绑定在 Java 中实现,而非 Kotlin。 Java/Kotlin 互操作性与数据绑定编译器相结合,似乎正在将 Kotlin Int 转换为 Java int 原始类型。 Java 基元不扩展 Object 并且没有 toString().

就个人而言,我建议不要投资于数据绑定。 Jetpack Compose 将使数据绑定在一年左右的时间内过时。

如果您仍希望使用数据绑定,最简单的解决方案是 String.valueOf()。当你说“这不是 Kotlin 的方式”时,你正在使用 data-binding-generated Java,而不是 Kotlin。

如果您仍然希望使用数据绑定,并且坚持必须使用 toString()...请尝试 @{Integer.valueOf(student.age).toString()}Integer.valueOf() 会给你一个 Java Integer 实例装箱你的 int,并且 Integer 有一个 toString() 方法。这仍然与 Kotlin 没有任何关系,但它会让你使用 toString().

一个月后,我发现了这个窍门:

android:text="@{`` + viewModel.currentStudent.age}"     //"``" is key point!! Not single/double quote