android - Kotlin DataBinding 将静态函数传递到布局 xml

标签 android kotlin android-databinding

在 Java 中,我可以使用以下方法轻松地将静态函数传递给布局 xml:

public static String formatUnixTime(long timeInSeconds, String pattern) {
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern, Locale.US);
    String value = simpleDateFormat.format(new Date(timeInSeconds * 1000));

    return value;
}

在 xml 中:

android:text='@{Utils.formatUnixTime(model.start_time, "hh:mm:ss")}'

但我在 Kotlin 中尝试使用 companion 但没有成功。它说

error: cannot find symbol
import my.package.name.HistoryItemBindingImpl;
                      ^
  symbol:   class HistoryItemBindingImpl
  location: package my.package.name

这是我在 kotlin 中尝试过的

class Utils {
    companion object {
        fun formatUnixTime(timeInSeconds : Long, pattern: String) : String {
            val simpleDateFormat = SimpleDateFormat(pattern, Locale.US)
            val value = simpleDateFormat.format(Date(timeInSeconds * 1000))

            return value
        }
    }

在 xml 中

android:text='@{Utils.Companion.formatUnixTime(model.start_time, "hh:mm:ss")}'

真心希望有人能帮忙。谢谢!

更新 在@Max Aves 的帮助下。我修复了我的代码,下面的代码将起作用。也许它会对某人有所帮助。

class Utils {
    companion object {
        @JvmStatic
        fun formatUnixTime(timeInSeconds : Long, pattern: String) : String {
            val simpleDateFormat = SimpleDateFormat(pattern, Locale.US)
            val value = simpleDateFormat.format(Date(timeInSeconds * 1000))

            return value
        }

你可以在xml中使用它

android:text='@{Utils.formatUnixTime(model.start_time, "hh:mm:ss")}'

最佳答案

您是否尝试过添加 @JvmStatic 注释?它应该有所帮助!

来自官方source :

Specifies that an additional static method needs to be generated from this element if it's a function. If this element is a property, additional static getter/setter methods should be generated.

关于android - Kotlin DataBinding 将静态函数传递到布局 xml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53058509/

相关文章:

c# - 系统.TypeLoadException : 'VTable setup of type AndroidX.AppCompat.View.Menu.MenuItemImpl failed'

android - 在 fragment 中处理 onBackPressed

class - 用基类初始化派生类

android - 与 Kotlin : ProcessDataBinding Unable to get public no-arg constructor 的数据绑定(bind)

android - 从 Android Studio '3.2 Canary 16' 升级到 '3.2 Beta 1' 后数据绑定(bind)编译错误

android - 为什么我在使用旧版 android 的 ActionBar Sherlock 时会在 onCreate() 出现错误?

android - BuildConfig:属性值必须恒定

android - 如何解决任务 ':app:kaptDebugKotlin'的配置错误?

java - Kotlin,响应式(Reactive)编程 : How to consume the value of one function output to another one

java - 错误 : cannot find symbol class DataBindingComponent