我想通过数据绑定(bind)在 View 中使用我的数据类的日期值。
如果我在Date字段上使用toString()方法,它将起作用。但是我想自定义日期值。
所以我用Method创建了Utils对象。这是Util对象

object DateUtils {

     fun toSimpleString(date: Date) : String {
        val format = SimpleDateFormat("dd/MM/yyy")
        return format.format(date)
    }
}

但是如果我想像这样在xml中使用此方法
<data>
    <import type="de.mjkd.journeylogger.Utils.DateUtils"/>

    <variable
        name="journey"
        type="de.mjkd.journeylogger.data.Journey"/>
</data>
...
    android:text="@{DateUtils.toSimpleString(journey.date)}"

我收到错误cannot find method toSimpleString(java.util.Date) in class ...
这是我的数据类:
data class Journey(var title: String, var date: Date?, var destination: String)

此代码有什么问题?

最佳答案

使用kotlin中的保留字对象,您真正要做的是声明一个实例。 Java中的等效项差不多是这样的:

class DataUtils {
    static DataUtils INSTANCE;
    public String toSimpleString()...
}

然后当您调用它时,您会执行DateUtils.INSTANCE.toSimpleString()
您应该能够在XML中使用DateUtils.INSTANCE.toSimpleString()
为了使toSimpleString可从静态上下文访问,您必须使用@JvmStatic标记该方法
object DateUtils {
    @JvmStatic
    fun toSimpleString(date: Date) : String {
        val format = SimpleDateFormat("dd/MM/yyy")
        return format.format(date)
    }
}

使用扩展功能(doc)
@file:JvmName("DateUtils")//Use this to change your class name in java, by default is <the file name>Kt (DateUtilsKt in your case)

fun Date.toSimpleString() : String {
    val format = SimpleDateFormat("dd/MM/yyy")
    return format.format(this)
}

然后,您可以像已经在做的那样直接在xml中使用它:
android:text="@{DateUtils.toSimpleString(journey.date)}"

07-27 16:19