如何使用初始值初始化 MutableLiveData ? 我正在寻找类似的东西:
val text = MutableLiveData<String>("initial value")
答案 0 :(得分:26)
您可以创建方便的Extension Function来为您进行初始化。
fun <T : Any?> MutableLiveData<T>.default(initialValue: T) = apply { setValue(initialValue) }
val liveData = MutableLiveData<String>().default("Initial value!")
答案 1 :(得分:24)
MutableLiveData
已更新,现在有一个接受初始值的构造函数:)
据我所见,此版本开始提供了构造函数:
implementation 'androidx.lifecycle:lifecycle-extensions:2.1.0-alpha01'
可惜他们没有更新MediatorLiveData
来反映这一点。
答案 2 :(得分:11)
最后,我意识到我可以使用
val text = MutableLiveData<String>().apply { postValue("initial value")}
({postValue
在从后台线程使用时是必需的,否则,从主线程使用时,您可以安全地使用value = "initial value"
)
答案 3 :(得分:1)
您可以这样创建扩展构造函数(糖技巧):
fun <T : Any?> MutableLiveData(defaultValue: T) = MutableLiveData<T>().apply { setValue(defaultValue) }
使用:
var defaultValue: MutableLiveData<String> = MutableLiveData("Default value")
答案 4 :(得分:1)
如果您希望在您的MutableLiveData<T>
中传递一些默认值,那么我有一个更好的解决方案。如果您使用的是Kotlin,则有一个class
叫ObservableProperty<T>
,可以帮助您传递默认为您的MutableLiveData。这是我的实现。
val nameLiveData = MutableLiveData<String>()
var name: String by Delegates.observable("") { _, _, newValue ->
nameLiveData.postValue(newValue)
}
在您的Activity
或Fragment
中观察此属性。
viewModel.nameLiveData.observe(this, Observer {
//Your logic goes here
})
您只需更改值name = "Joe"
,它就会发布到您的LiveData中。
答案 5 :(得分:0)
您不能那样做。如果需要,可以将值设置如下。
val text = MutableLiveData<String>()
text.value = "initial"
答案 6 :(得分:0)
也是这样。
val data = MutableLiveData<String>()
data.value = "data"
val text = MutableLiveData<String>().apply {
"apply"
}
Log.d("Data",text.value)
答案 7 :(得分:0)
尽管这是一个Kotlin问题,但如果我也为此添加Java版本,那可能会有所帮助。
使用+ (void)saveEntity:(CloudKitEntity *)entity completion:(void (^)(NSError * _Nonnull))completion {
[[self privateDatabase] saveRecord:entity.record completionHandler:^(CKRecord * _Nullable record, NSError * _Nullable error) {
if (completion) {
completion(error);
}
}];
}
依赖项时:
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
<mainClass>com.game.Main</mainClass>
</manifest>
</archive>
</configuration>
<executions>
<execution>
<goals>
<goal>repackage</goal>
</goals>
</execution>
</executions>
</plugin>
使用以下构造函数初始化androidx
。
implementation "androidx.lifecycle:lifecycle-viewmodel:2.1.0"
使用MutableLiveData
依赖项时:
new MutableLiveData<>("Initial value");
初始化如下。
android
implementation 'android.arch.lifecycle:viewmodel:1.1.1'
依赖项的确具有构造函数,该构造函数采用用于初始化MutableLiveData<String> text = MutableLiveData<String>();
text.setValue("Initial value");
的值。但是,如果您使用的是androidx
依赖项,则没有使用构造函数进行初始化的选择