76 votes

MutableLiveData avec valeur initiale

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

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

89voto

Fred Porciúncula Points 4612

MutableLiveData a été mis à jour et maintenant il a un constructeur qui accepte une valeur initiale :)

De ce que je peux voir, le constructeur est disponible à partir de cette version:

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

C'est une honte qu'ils n'ont pas mis à jour MediatorLiveData pour refléter le fait que, bien que.


2.1.0 est enfin stable, alors maintenant vous pouvez réellement voir le nouveau constructeur dans la documentation.

52voto

Lionel Briand Points 595

Vous pouvez créer une fonction d'extension pratique qui effectue l'initialisation pour vous.

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

val liveData = MutableLiveData<String>().default("Initial value!")
 

40voto

Francis Novotný Points 317

Enfin, je me rends compte que je peux utiliser

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

( postValue est nécessaire lors de l'utilisation à partir d'un thread d'arrière-plan, sinon lors de l'utilisation à partir du thread principal, vous pouvez utiliser en toute sécurité value = "initial value" )

14voto

Loser Points 354

Si c'est un Kotlin question, je pensais qu'il pourrait être utile si j'ai mis la version de Java pour cela ainsi.

Tout en utilisant androidx dépendance:

implementation "androidx.lifecycle:lifecycle-viewmodel:2.1.0"

Initialiser l' MutableLiveData en utilisant le constructeur de la façon suivante.

new MutableLiveData<>("Initial value");

Alors que l'aide de l' android dépendance:

implementation 'android.arch.lifecycle:viewmodel:1.1.1'

Initialiser comme suit.

MutableLiveData<String> text = MutableLiveData<String>();
text.setValue("Initial value");

L' androidx de dépendance n'ont le constructeur qui prend une valeur pour l'initialisation de votre LiveData. Toutefois, si vous utilisez l' android dépendance vous n'aurez pas la possibilité de faire l'initialisation en utilisant le constructeur

2voto

Android Team Points 7530

De cette façon aussi ..

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X