MutableLiveData с начальным значением

Как я могу инициализировать MutableLiveData с начальным значением? Я ищу что-то вроде:

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

Ответы

Ответ 1

MutableLiveData был обновлен, и теперь у него есть конструктор, который принимает начальное значение :)

Из того, что я вижу, конструктор доступен начиная с этой версии:

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

Жаль, что они не обновили MediatorLiveData, чтобы отразить это, хотя.


2.1.0 наконец-то стабильно, так что теперь вы можете увидеть новый конструктор в документации.

Ответ 2

Вы можете создать удобную функцию расширения, которая выполняет инициализацию для вас.

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

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

Ответ 3

Наконец, я понимаю, что могу использовать

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

(postValue необходим при использовании из фонового потока, в противном случае при использовании из основного потока вы можете безопасно использовать value = "initial value")

Ответ 4

Также так..

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

Ответ 5

Вы можете создать конструктор расширений (сахарный трюк) следующим образом:

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

С помощью:

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

Ответ 6

Вы не можете так поступать. Если вы хотите, вы можете установить значение следующим образом.

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