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"