Как я могу инициализировать MutableLiveData с начальным значением? Я ищу что-то вроде:
val text = MutableLiveData<String>("initial value")
Как я могу инициализировать MutableLiveData с начальным значением? Я ищу что-то вроде:
val text = MutableLiveData<String>("initial value")
MutableLiveData
был обновлен, и теперь у него есть конструктор, который принимает начальное значение :)
Из того, что я вижу, конструктор доступен начиная с этой версии:
implementation 'androidx.lifecycle:lifecycle-extensions:2.1.0-alpha01'
Жаль, что они не обновили MediatorLiveData
, чтобы отразить это, хотя.
2.1.0
наконец-то стабильно, так что теперь вы можете увидеть новый конструктор в документации.
Вы можете создать удобную функцию расширения, которая выполняет инициализацию для вас.
fun <T : Any?> MutableLiveData<T>.default(initialValue: T) = apply { setValue(initialValue) }
val liveData = MutableLiveData<String>().default("Initial value!")
Наконец, я понимаю, что могу использовать
val text = MutableLiveData<String>().apply { postValue("initial value")}
(postValue
необходим при использовании из фонового потока, в противном случае при использовании из основного потока вы можете безопасно использовать value = "initial value"
)
Также так..
val data = MutableLiveData<String>()
data.value = "data"
val text = MutableLiveData<String>().apply {
"apply"
}
Log.d("Data",text.value)
Вы можете создать конструктор расширений (сахарный трюк) следующим образом:
fun <T : Any?> MutableLiveData(defaultValue: T) = MutableLiveData<T>().apply { setValue(defaultValue) }
С помощью:
var defaultValue: MutableLiveData<String> = MutableLiveData("Default value")
Вы не можете так поступать. Если вы хотите, вы можете установить значение следующим образом.
val text = MutableLiveData<String>()
text.value = "initial"