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
刚学习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