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 thatage
is 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
Int
into the Javaint
primitive type. Java primitives do not extendObject
and 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 JavaInteger
instance boxing yourint
, andInteger
has atoString()
method. This still has nothing really to do with Kotlin, but it would let you usetoString()
.