Just learned DataBinding and find out that the powerful built-in toString() from Kotlin is not available:
<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>
I know String.valueOf() will work, but it's not Kotlin way. Any help would be appreciated.
There is no type in either Java or Kotlin named
integer. I am going to guess thatageis a KotlinInt.Data binding is implemented in Java, not Kotlin. Java/Kotlin interoperability, combined with the data binding compiler, appears to be converting the Kotlin
Intinto the Javaintprimitive type. Java primitives do not extendObjectand do not havetoString().Personally, I recommend not investing in data binding. Jetpack Compose will make data binding obsolete in a year or so.
If you still wish to use data binding, the simplest solution is
String.valueOf(). While you say "it's not Kotlin way", you are working with data-binding-generated Java, not Kotlin.If you still wish to use data binding, and you insist that you must use
toString()... try@{Integer.valueOf(student.age).toString()}.Integer.valueOf()will give you a JavaIntegerinstance boxing yourint, andIntegerhas atoString()method. This still has nothing really to do with Kotlin, but it would let you usetoString().