具有初始值的 MutableLiveData
MutableLiveData with initial value
如何用初始值初始化 MutableLiveData?
我正在寻找类似的东西:
val text = MutableLiveData<String>("initial value")
也是这样..
val data = MutableLiveData<String>()
data.value = "data"
val text = MutableLiveData<String>().apply {
"apply"
}
Log.d("Data",text.value)
终于知道可以用了
val text = MutableLiveData<String>().apply { postValue("initial value")}
(从后台线程使用时需要postValue
,否则从主线程使用时你可以安全地使用value = "initial value"
)
您可以创建一个方便的 Extension Function 来为您进行初始化。
fun <T : Any?> MutableLiveData<T>.default(initialValue: T) = apply { setValue(initialValue) }
val liveData = MutableLiveData<String>().default("Initial value!")
MutableLiveData
已更新,现在它有一个接受初始值的构造函数:)
据我所知,构造函数从这个版本开始可用:
implementation 'androidx.lifecycle:lifecycle-extensions:2.1.0-alpha01'
遗憾的是他们还没有更新 MediatorLiveData
来反映这一点。
2.1.0
is finally stable, so now you can actually see the new constructor in the documentation.
您可以像这样创建一个扩展构造函数(糖招):
fun <T : Any?> MutableLiveData(defaultValue: T) = MutableLiveData<T>().apply { setValue(defaultValue) }
使用:
var defaultValue: MutableLiveData<String> = MutableLiveData("Default 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
依赖项,您将无法选择使用构造函数进行初始化。
如果你想在你的 MutableLiveData<T>
中传递一些默认值,我有一个更好的解决方案如果你使用的是 kotlin,那么有一个名为 ObservableProperty<T>
的 class
可以帮助你为你的 MutableLiveData.Here 的我的实现传递默认值。
val nameLiveData = MutableLiveData<String>()
var name: String by Delegates.observable("") { _, _, newValue ->
nameLiveData.postValue(newValue)
}
在您的 Activity
或 Fragment
中观察此 属性。
viewModel.nameLiveData.observe(this, Observer {
//Your logic goes here
})
您只需更改值即可 name = "Joe"
它会发布在您的 LiveData
我会这样做:
val text by lazy { MutableLiveData<String>("Initial text") }
这样,您就可以使用 kotlin 中的 lazy 并设置默认值。或者像这样更短:
val text by lazy { MutableLiveData<>("Initial text") }
如何用初始值初始化 MutableLiveData? 我正在寻找类似的东西:
val text = MutableLiveData<String>("initial value")
也是这样..
val data = MutableLiveData<String>()
data.value = "data"
val text = MutableLiveData<String>().apply {
"apply"
}
Log.d("Data",text.value)
终于知道可以用了
val text = MutableLiveData<String>().apply { postValue("initial value")}
(从后台线程使用时需要postValue
,否则从主线程使用时你可以安全地使用value = "initial value"
)
您可以创建一个方便的 Extension Function 来为您进行初始化。
fun <T : Any?> MutableLiveData<T>.default(initialValue: T) = apply { setValue(initialValue) }
val liveData = MutableLiveData<String>().default("Initial value!")
MutableLiveData
已更新,现在它有一个接受初始值的构造函数:)
据我所知,构造函数从这个版本开始可用:
implementation 'androidx.lifecycle:lifecycle-extensions:2.1.0-alpha01'
遗憾的是他们还没有更新 MediatorLiveData
来反映这一点。
2.1.0
is finally stable, so now you can actually see the new constructor in the documentation.
您可以像这样创建一个扩展构造函数(糖招):
fun <T : Any?> MutableLiveData(defaultValue: T) = MutableLiveData<T>().apply { setValue(defaultValue) }
使用:
var defaultValue: MutableLiveData<String> = MutableLiveData("Default 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
依赖项,您将无法选择使用构造函数进行初始化。
如果你想在你的 MutableLiveData<T>
中传递一些默认值,我有一个更好的解决方案如果你使用的是 kotlin,那么有一个名为 ObservableProperty<T>
的 class
可以帮助你为你的 MutableLiveData.Here 的我的实现传递默认值。
val nameLiveData = MutableLiveData<String>()
var name: String by Delegates.observable("") { _, _, newValue ->
nameLiveData.postValue(newValue)
}
在您的 Activity
或 Fragment
中观察此 属性。
viewModel.nameLiveData.observe(this, Observer {
//Your logic goes here
})
您只需更改值即可 name = "Joe"
它会发布在您的 LiveData
我会这样做:
val text by lazy { MutableLiveData<String>("Initial text") }
这样,您就可以使用 kotlin 中的 lazy 并设置默认值。或者像这样更短:
val text by lazy { MutableLiveData<>("Initial text") }