Привязка данных не может вызвать статическую функцию с String.function () - PullRequest
0 голосов
/ 26 февраля 2019

У меня есть функция, которая форматирует некоторый текст

fun String.formatTo(): String {
    if (this.isNotEmpty()) {
        val value = this.toDouble()
        return "%.02f".format(value)
    }
    return ""
}

И я хочу применить это удовольствие к моему textView, используя привязку данных, поэтому я вызвал textView android:text="@{viewModel.text.formatTo()}", импортируя класс в data измой макет

<data>
    <import type="com.project.utils.extensions.ExtKt"/>

    <variable
        name="viewModel"
        type="com.project.ViewModel" />
</data>

Но у меня есть ошибка при создании:

Found data binding errors.
****/ data binding error ****msg:cannot find method formatTo() in class java.lang.String

В чем проблема?

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

Привязка данных по-прежнему является модулями Java, поэтому некоторые функции kotlin, такие как функции расширения, не могут использоваться там.Единственное, что вы можете сделать здесь - создать определенную функцию в вашем ViewModel классе.

class ViewModel {
    val text: String
    ...
    fun getDisplayText(): String = text.formatTo()
}

Может быть, вы захотите использовать вычисляемые свойства.

val displayText: String get() = text.formatTo()

В любом случае, ваш вызов xmlбудет выглядеть следующим образом:

android:text="@{viewModel.displayText}"
0 голосов
/ 26 февраля 2019

Попробуйте ниже

Используйте @JvmStatic как показано ниже

@JvmStatic
fun String.formatTo(): String {
    if (this.isNotEmpty()) {
        val value = this.toDouble()
        return "%.02f".format(value)
    }
    return ""
}

Обновление

android:text="@{ExtKt.formatTo()}"
...