如何用初始值初始化 MutableLiveData? 我正在寻找类似的东西:
val text = MutableLiveData<String>("initial value")
您可以创建一个方便的Extension Function为您进行初始化。
fun <T : Any?> MutableLiveData<T>.default(initialValue: T) = apply { setValue(initialValue) }
val liveData = MutableLiveData<String>().default("Initial value!")
更新: 现在我会用
MutableStateFlow
代替MutableLiveData
的初始值。
https://developer.android.com/kotlin/flow/stateflow-and-sharedflow
终于知道可以用了
val text = MutableLiveData<String>().apply { postValue("initial value")}
(从后台线程使用时需要
postValue
,否则从主线程使用时您可以安全地使用value = "initial value"
)
虽然这是一个 Kotlin 问题,但我认为如果我也为此提供 Java 版本可能会有所帮助。
在使用
androidx
依赖时:
implementation "androidx.lifecycle:lifecycle-viewmodel:2.1.0"
使用构造函数初始化
MutableLiveData
,如下所示。
new MutableLiveData<>("Initial value");
在使用
android
依赖项时:
implementation 'android.arch.lifecycle:viewmodel:1.1.1'
初始化如下。
MutableLiveData<String> text = MutableLiveData<String>();
text.setValue("Initial value");
androidx
依赖项确实具有构造函数,该构造函数为您的LiveData
的初始化取值。但是,如果您使用 android
依赖项,您将无法选择使用构造函数进行初始化。
您可以像这样创建一个扩展构造函数(糖技巧):
fun <T : Any?> MutableLiveData(defaultValue: T) = MutableLiveData<T>().apply { setValue(defaultValue) }
使用:
var defaultValue: MutableLiveData<String> = MutableLiveData("Default value")
也是这样..
val data = MutableLiveData<String>()
data.value = "data"
val text = MutableLiveData<String>().apply {
"apply"
}
Log.d("Data",text.value)
如果你想在你的
MutableLiveData<T>
中传递一些默认值,我有一个更好的解决方案.class
在您的
ObservableProperty<T>
或
val nameLiveData = MutableLiveData<String>()
var name: String by Delegates.observable("") { _, _, newValue ->
nameLiveData.postValue(newValue)
}
中观察此属性。
Activity
所有你需要做的改变价值是做
Fragment
它会发布在你的LiveData
我会这样做:
这样,您就可以使用 kotlin 中的 lazy 并设置默认值。或者像这样更短:
name = "Joe"