Comment puis-je initialiser MutableLiveData avec la valeur initiale? Je cherche quelque chose comme:
val text = MutableLiveData<String>("initial value")
MutableLiveData
a été mis à jour et a maintenant un constructeur qui accepte une valeur initiale :)
D'après ce que je peux voir, le constructeur est disponible à partir de cette version:
implementation 'androidx.lifecycle:lifecycle-extensions:2.1.0-alpha01'
C'est dommage qu'ils n'aient pas mis à jour MediatorLiveData
pour refléter cela, cependant.
Vous pouvez créer un outil pratique fonction d'extension qui effectue l'initialisation à votre place.
fun <T : Any?> MutableLiveData<T>.default(initialValue: T) = apply { setValue(initialValue) }
val liveData = MutableLiveData<String>().default("Initial value!")
Enfin, je réalise que je peux utiliser
val text = MutableLiveData<String>().apply { postValue("initial value")}
(postValue
est nécessaire lorsque vous utilisez un thread d'arrière-plan, sinon vous pouvez utiliser en toute sécurité value = "initial value"
)
Vous pouvez créer un constructeur d'extension (truc en sucre) comme ceci:
fun <T : Any?> MutableLiveData(defaultValue: T) = MutableLiveData<T>().apply { setValue(defaultValue) }
En utilisant:
var defaultValue: MutableLiveData<String> = MutableLiveData("Default value")
Aussi de cette façon ..
val data = MutableLiveData<String>()
data.value = "data"
val text = MutableLiveData<String>().apply {
"apply"
}
Log.d("Data",text.value)