web-dev-qa-db-fra.com

Fonctions d'extension de Kotlin Liaison de données

Existe-t-il une possibilité d'utiliser la fonction d'extension avec une liaison de données? XML:

<data>
    <import type="my.package.domain.country.model.City.streetName" />

    <variable
        name="city"
        type="my.package.domain.country.model.City" />
</data>

<TextView
    Android:id="@+id/city"
    Android:layout_width="wrap_content"
    Android:layout_height="wrap_content"
    Android:text="@{city.street.streetName()}" />

my.package.domain.country.model.city

data class City(
        val id: String,
        val street: Street
) 

fun City.streetName(): String = street.houseNumber

Erreur

[kapt] Une exception s'est produite: Android.databinding.tool.util.LoggedErrorException: erreurs de liaison de données trouvées. ****/erreur de liaison de données **** msg: impossible de trouver la méthode streetName () dans la classe my.package.domain.country.model.City

Merci ;)

28
user2725105

Vous devez d'abord importer CityKt en xml

<import type="my.package.domain.country.model.CityKt" />

dans la section des données, vous pouvez l'utiliser comme ceci

<TextView
  Android:id="@+id/city"
  Android:layout_width="wrap_content"
  Android:layout_height="wrap_content"
  Android:text="@{CityKt.streetName(city)}" />

Si vous examinez CityKt, vous verrez qu'il existe une méthode statique Java avec City comme premier argument

27
skiff2011