web-dev-qa-db-ja.com

初期値を持つMutableLiveData

MutableLiveDataを初期値で初期化するにはどうすればよいですか?私は次のようなものを探しています:

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

26
Francis

MutableLiveDataが更新され、初期値を受け入れるコンストラクターが追加されました:)

私が見ることができるものから、コンストラクタはこのバージョンから利用可能です:

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

ただし、MediatorLiveDataを更新していないことを反映して残念です。

31

初期化を行う便利な 拡張機能 を作成できます。

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

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

最後に、私は使用できることに気付きます

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

postValueはバックグラウンドスレッドから使​​用する場合に必要です。それ以外の場合、メインスレッドから使​​用する場合はvalue = "initial value")を安全に使用できます

20
Francis

次のような拡張コンストラクター(シュガートリック)を作成できます。

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

を使用して:

var defaultValue: MutableLiveData<String> = MutableLiveData("Default value")
0

また、このように..

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