I want to use the Date value of my Data class in view via Databinding. If I use the toString() method on the Date field it works. But I want to customize the Date value. So I created the Utils object with Method. This is the Util object
object DateUtils {
fun toSimpleString(date: Date) : String {
val format = SimpleDateFormat("dd/MM/yyy")
return format.format(date)
}
}
But if I want to use this method in the xml like this
<data>
<import type="de.mjkd.journeylogger.Utils.DateUtils"/>
<variable
name="journey"
type="de.mjkd.journeylogger.data.Journey"/>
</data>
...
android:text="@{DateUtils.toSimpleString(journey.date)}"
I get an error cannot find method toSimpleString(java.util.Date) in class ...
This is my Dataclass:
data class Journey(var title: String, var date: Date?, var destination: String)
Whats wrong with this code?
The function toSimpleString must be static, so:
Using the reserved word object in kotlin, that you really doing is declare a single instance. the equivalent in java is something more or less like:
then when you call it you do a
DateUtils.INSTANCE.toSimpleString()
You should capable to use
DateUtils.INSTANCE.toSimpleString()
in your xmlIn order to make
toSimpleString
accessible from static context, you have to flag the method with@JvmStatic
Using extension function(doc)
Then you can use it directly in xml as you are already doing:
Why don't you just use a top-level function which is static by default? A top-level function is not defined in any class.
Also, notice how Jouney's date is nullable in your example and your
toSimpleString
only accepts a non-nullable Date!I changed it, so that it will return the string of the current date in case null is passed.
More easy way would be to make a
getDateString
in model class.I like this way because I don't need to import any class in this case.