Kotlin Extension Functions Databinding
While @skiff2011 is correct, one could also use alias
to prevent the Kt
postfix.
For example, a certain extension function is located in ExtensionFunctionsKt
can be aliased by ExtensionFunctions
<import
alias="ExtensionFunctions"
type="com.helloworld.app.util.ExtensionFunctionsKt" />
<variable
name="someData"
type="com.helloworld.app.model.SomeData" />
The ExtensionFunction
alias can now be used to call the extension function. The first argument still needs to be the extended class variable.
<TextView
android:id="@+id/city"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{ExtensionFunctions.doStuff(someData)}" />
If using Utils class you can to this:
object Utils(){
fun streetName(): String {}
}
<import
type="com.helloworld.app.util.Utils" />
<TextView
android:id="@+id/txt"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{Utils.INSTANCE.streetName()}"
/>
You have to import CityKt firstly into xml
<import type="my.package.domain.country.model.CityKt" />
int the data section then you can use it like this
<TextView
android:id="@+id/city"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{CityKt.streetName(city)}" />
If you review CityKt you will see that there is static Java method with City as first argument
Extension function
Ex:
fun Context.isDarkMode(): Boolean {
}
Now we have Extenstion function for dark mode which can be accessed using context.
Usually in Kotlin class we can access using context obj like below.
context.isDarkMode()
But in Xml,we can't access like above.
We need to import Extension function by appending KT to class.
Ex) If your file name is Extensions,then import should be ExtensionsKt.
Import like below in xml.
<import type="com.example.extensions.ExtensionsKt" />
And then we can access Extension function like below i.e we need to pass object for which we are creating Extension i.e in our case it is context.
app:context='@{(ExtensionsKt.isDarkMode(context)}'