web-dev-qa-db-ja.com

Kotlin拡張関数のデータバインディング

データバインディングで拡張機能を使用する可能性はありますか? 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

エラー

[kapt]例外が発生しました:Android.databinding.tool.util.LoggedErrorException:データバインディングエラーが見つかりました。 **** /データバインディングエラー**** msg:クラスmy.package.domain.country.model.CityでメソッドstreetName()が見つかりません

ありがとう;)

28
user2725105

まずCityKtをxmlにインポートする必要があります

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

データセクションをintにすると、次のように使用できます

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

CityKtを確認すると、静的なJavaメソッドが最初の引数としてCityであることがわかります。

27
skiff2011