具有初始值的MutableLiveData

Fra*_*cis 33 android kotlin android-livedata

如何用初始值初始化MutableLiveData?我正在寻找类似的东西:

val text = MutableLiveData<String>("initial value")

Fre*_*ula 45

MutableLiveData 已更新,现在它有一个接受初始值的构造函数:)

从我所看到的,构造函数从这个版本开始可用:

implementation 'androidx.lifecycle:lifecycle-extensions:2.1.0-alpha01'

MediatorLiveData尽管如此,他们还没有更新以反映这一点,这是一种耻辱.

  • 这还正确吗?查看文档,我看不到接受任何参数的公共构造函数:https://developer.android.com/reference/android/arch/lifecycle/MutableLiveData (4认同)
  • @KlitosG。[`2.1.0` 现在终于稳定了](https://developer.android.com/jetpack/androidx/releases/arch#2.1.0),所以你现在实际上可以在文档中看到构造函数:https:// /developer.android.com/reference/androidx/lifecycle/MutableLiveData.html#MutableLiveData(T) (2认同)

Lio*_*and 36

您可以创建一个方便的扩展功能,为您进行初始化.

fun <T : Any?> MutableLiveData<T>.default(initialValue: T) = apply { setValue(initialValue) }

val liveData = MutableLiveData<String>().default("Initial value!")
Run Code Online (Sandbox Code Playgroud)

  • 您还可以创建一个半构造器`fun &lt;T:Any?&gt; MutableLiveData &lt;T&gt;(initialValue:T)= MutableLiveData()。apply {postValue(initialValue)}`以使其更加方便(在您使用setValue`确定此方法只会从主线程调用) (4认同)

Fra*_*cis 20

最后,我意识到我可以使用

val text = MutableLiveData<String>().apply { postValue("initial value")}

(postValue从后台线程使用时是必要的,否则从主线程使用时可以安全使用value = "initial value")

  • 您可以在ViewModel中使用setValue. (5认同)

Rea*_*hed 14

虽然这是一个 Kotlin 问题,但我认为如果我也为此提供 Java 版本可能会有所帮助。

使用androidx依赖时:

implementation "androidx.lifecycle:lifecycle-viewmodel:2.1.0"
Run Code Online (Sandbox Code Playgroud)

MutableLiveData使用构造函数初始化,如下所示。

new MutableLiveData<>("Initial value");
Run Code Online (Sandbox Code Playgroud)

使用android依赖项时:

implementation 'android.arch.lifecycle:viewmodel:1.1.1'
Run Code Online (Sandbox Code Playgroud)

初始化如下。

MutableLiveData<String> text = MutableLiveData<String>();
text.setValue("Initial value");
Run Code Online (Sandbox Code Playgroud)

androidx依赖确实有需要的数值为你的初始化构造函数LiveData。但是,如果您使用android依赖项,您将无法选择使用构造函数进行初始化。