web-dev-qa-db-fra.com

MutableLiveData avec valeur initiale

Comment puis-je initialiser MutableLiveData avec la valeur initiale? Je cherche quelque chose comme:

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

26
Francis

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.

31
Fred Porciúncula

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!")
32
Lionel Briand

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")

20
Francis

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")
0

Aussi de cette façon ..

    val data = MutableLiveData<String>()
    data.value = "data"
    val text = MutableLiveData<String>().apply {
        "apply"
    }
    Log.d("Data",text.value)
0
Android Team