如何在XML数据绑定中使用Singleton类方法?

赛义德·穆罕默德·阿维斯

我的android studio kotlin项目中有一个singleton类,我想在xml中使用它的方法。例如,我在xml中有一个带有标记的变量@{appointment.startTime}我想使用全局函数格式化这个约会。开始时间,并且该函数存在于我的单例类中,名称为parse(startTime: String),但是我无法访问它。我试着做:

@{SingeltonClass.parse(appointment.startTime)}

但这根本不起作用。我尝试使用类类型创建变量,并尝试访问该变量,但是它也不适用于该类型。您的帮助将使我高兴!提前致谢。

山姆

这花了我一点点时间,但是很简单。在此示例中,我具有用户在反映在应用程序中的网站上选择的自定义原色。我将此颜色存储在共享的“首选项”中,您将看到一个名为getSP PrimaryColorHex的方法,该方法只是调用扩展方法以从SharedPreferences中获取它,并在应用程序启动时将其加载。对样本不重要。

首先,您需要制作单例并使用JVMStatic标记访问函数,以便可以将其用于生成数据绑定类。

例:

class YACustomPreference private constructor(): BaseObservable(){

    /////////////////////////////////////////////////////////////////
    // STATIC ACCESSORS
    /////////////////////////////////////////////////////////////////
    companion object {

        /////////////////////////////////////////////////////////////////
        // SINGLETON MEMBERS
        /////////////////////////////////////////////////////////////////
        lateinit var INSTANCE: YACustomPreference

        /////////////////////////////////////////////////////////////////
        // SINGLETON
        /////////////////////////////////////////////////////////////////
        @JvmStatic
        fun getInstance(): YACustomPreference {
            if(!::INSTANCE.isInitialized) {
                INSTANCE = YACustomPreference()
            }

            return INSTANCE
        }
    }

    /////////////////////////////////////////////////////////////////
    // METHODS
    /////////////////////////////////////////////////////////////////
    @Bindable
    fun getPrimaryColorHex(): String {
        return getSPPrimaryColorHex()
    }

}

然后,将其导入到XML中并使用它。

例:

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        xmlns:bind="http://schemas.android.com/apk/res-auto">

    <data>
        <import type="com.appstudio35.yourappstudio.models.YACustomPreference" />
    </data>

    <RelativeLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@{YACustomPreference.getInstance().primaryColorHex}" />

</layout>

另外,如果您不喜欢每次都可以像这样延迟加载它,请检查它是否初始化:

class YACustomPreference private constructor(): BaseObservable(){

    /////////////////////////////////////////////////////////////////
    // STATIC ACCESSORS
    /////////////////////////////////////////////////////////////////
    companion object {

        /////////////////////////////////////////////////////////////////
        // SINGLETON MEMBERS
        /////////////////////////////////////////////////////////////////
        val INSTANCE: YACustomPreference by lazy {
            YACustomPreference()
        }

        /////////////////////////////////////////////////////////////////
        // SINGLETON
        /////////////////////////////////////////////////////////////////
        @JvmStatic
        fun getInstance(): YACustomPreference {
            return INSTANCE
        }
    }

    /////////////////////////////////////////////////////////////////
    // METHODS
    /////////////////////////////////////////////////////////////////
    @Bindable
    fun getPrimaryColorHex(): String {
        return getSPPrimaryColorHex()
    }

}

最后,如果需要,可以将@JVMStatic放在成员变量上,而不是getInstance上,如果需要,可以直接使用它。另外,请记住名称必须与吸气剂不同。

如果您使用

var instance -> auto generates property of getInstance setInstance

所以有

fun getInstance() -> will create conflict

因此想出一个唯一的名称以避免冲突,或者直接使用变量。在此示例中,我做了所有CAPS以避免冲突。

编码愉快!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Dialog中使用数据绑定?

来自分类Dev

如何在ProgressBar中使用数据绑定?

来自分类Dev

如何在xml中使用视图引用将数据绑定传递给函数?

来自分类Dev

如何在Scala中使用Java自绑定类

来自分类Dev

如何在类中使用模块方法?

来自分类Dev

如何在cupsEnumDests中使用类方法?

来自分类Dev

如何在Dart中使用数据绑定禁用按钮?

来自分类Dev

如何在sqlDataSource的select参数中使用数据绑定?

来自分类Dev

如何在WPF C#中使用数据绑定?

来自分类Dev

如何在sqlDataSource的select参数中使用数据绑定?

来自分类Dev

如何在绑定中使用绑定

来自分类Dev

Android数据绑定-如何在数据绑定中使用ViewStub

来自分类Dev

如何在类库中使用实体数据模型

来自分类Dev

如何在数据层或类中使用RavenDB查询?

来自分类Dev

如何在Kotlin数据类中使用枚举

来自分类Dev

如何在数据层或类中使用RavenDB查询?

来自分类Dev

如何在Singleton类,Simple Injector中使用瞬态记录器

来自分类Dev

如何在Singleton类,Simple Injector中使用瞬态记录器

来自分类Dev

如何在实例方法和类方法中使用成员

来自分类Dev

如何在类中使用 If

来自分类Dev

使用装饰器时如何在VueJS中使用Data对象?“预期由类方法'数据'使用的'this'。”

来自分类Dev

如何在C#中使用Datagridview显示XML数据

来自分类Dev

如何在iOS中使用Story Board解析Xml数据?

来自分类Dev

如何在Java中使用其数据反转xml节点

来自分类Dev

如何在类中使用lambda作为方法?

来自分类Dev

如何在类的方法参数中使用模板

来自分类Dev

如何在不同的类ArrayList中使用相同的方法?

来自分类Dev

如何在AppWidgetProvider类中使用OnClickListener方法

来自分类Dev

PHP如何在方法中使用类实例

Related 相关文章

  1. 1

    如何在Dialog中使用数据绑定?

  2. 2

    如何在ProgressBar中使用数据绑定?

  3. 3

    如何在xml中使用视图引用将数据绑定传递给函数?

  4. 4

    如何在Scala中使用Java自绑定类

  5. 5

    如何在类中使用模块方法?

  6. 6

    如何在cupsEnumDests中使用类方法?

  7. 7

    如何在Dart中使用数据绑定禁用按钮?

  8. 8

    如何在sqlDataSource的select参数中使用数据绑定?

  9. 9

    如何在WPF C#中使用数据绑定?

  10. 10

    如何在sqlDataSource的select参数中使用数据绑定?

  11. 11

    如何在绑定中使用绑定

  12. 12

    Android数据绑定-如何在数据绑定中使用ViewStub

  13. 13

    如何在类库中使用实体数据模型

  14. 14

    如何在数据层或类中使用RavenDB查询?

  15. 15

    如何在Kotlin数据类中使用枚举

  16. 16

    如何在数据层或类中使用RavenDB查询?

  17. 17

    如何在Singleton类,Simple Injector中使用瞬态记录器

  18. 18

    如何在Singleton类,Simple Injector中使用瞬态记录器

  19. 19

    如何在实例方法和类方法中使用成员

  20. 20

    如何在类中使用 If

  21. 21

    使用装饰器时如何在VueJS中使用Data对象?“预期由类方法'数据'使用的'this'。”

  22. 22

    如何在C#中使用Datagridview显示XML数据

  23. 23

    如何在iOS中使用Story Board解析Xml数据?

  24. 24

    如何在Java中使用其数据反转xml节点

  25. 25

    如何在类中使用lambda作为方法?

  26. 26

    如何在类的方法参数中使用模板

  27. 27

    如何在不同的类ArrayList中使用相同的方法?

  28. 28

    如何在AppWidgetProvider类中使用OnClickListener方法

  29. 29

    PHP如何在方法中使用类实例

热门标签

归档