我的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] 删除。
我来说两句