如何解决Kotlin“ toString”在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
是科特林Int
。
cannot find method toString() in class int
数据绑定是用Java实现的,而不是Kotlin。 Java / Kotlin互操作性与数据绑定编译器相结合,似乎正在将Kotlin Int
转换为Java int
基本类型。 Java原语不扩展Object
,也不具有toString()
。
就个人而言,我建议不要投资于数据绑定。 Jetpack Compose将使数据绑定在一年左右的时间内过时。
如果您仍然希望使用数据绑定,则最简单的解决方案是String.valueOf()
。当您说“这不是Kotlin的方式”时,您正在使用数据绑定生成的Java,而不是Kotlin。
如果您仍然希望使用数据绑定,并且坚持要求必须使用toString()
...,请尝试@{Integer.valueOf(student.age).toString()}
。 Integer.valueOf()
将为您提供一个Java Integer
实例,将您的int
装箱,而Integer
有一个toString()
方法。这仍然与Kotlin无关,但可以让您使用toString()
。
一个月后,我发现了这个窍门:
// phase 1
trans->processRequestHeaders();
trans->intervention(it);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。