数据绑定无法使用 String.function() 调用静态函数

Str*_*ove 0 android kotlin android-databinding

我有一个格式化一些文本的函数

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

我想使用数据绑定将这种乐趣应用到我的 textView 中,所以我调用了 textView ,在我的布局android:text="@{viewModel.text.formatTo()}"中导入类data

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

    <variable
        name="viewModel"
        type="com.project.ViewModel" />
</data>
Run Code Online (Sandbox Code Playgroud)

但我在构建时遇到了错误:

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

什么是问题?

Meh*_*ria 5

创建一个object命名的ExtKt(或任何你想要的)并在其中定义你的扩展函数并用@JvmStatic如下注释它

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

更新

android:text="@{ExtKt.formatTo()}"
Run Code Online (Sandbox Code Playgroud)