【发布时间】:2019-11-07 10:56:57
【问题描述】:
official Android developer docs 中的协程 LiveData 示例给出了以下使用 emit() 的示例:
val user: LiveData<User> = liveData {
val data = database.loadUser() // loadUser is a suspend function.
emit(data)
}
我看到的每个emit() 示例包括这个ProAndroidDev tutorial 在使用emit() 时都会创建一个新的LiveData 对象。如何从已创建的LiveData 对象和emit() 值中获取LiveDataScope?例如
class MyViewModel : ViewModel() {
private val user: MutableLiveData<User> = MutableLiveData()
fun getUser(): LiveData<User> {
return user
}
fun loadUser() {
// Code to emit() values to existing user LiveData object.
}
非常感谢,非常感谢所有帮助!
【问题讨论】:
-
没有必要。只需观察片段中的
user即可。这是带有协程的实时数据。 -
@coroutineDispatcher 我将如何处理我想发送另一个网络请求以刷新
LiveData对象的情况?或者我想在更新LiveData对象之前等待按钮单击的情况?使用我提供的示例只允许更新LiveData对象一次,此时Fragment第一次实例化ViewModel。我确定我错过了一些东西,感谢您的帮助! -
developer.android.com/reference/androidx/lifecycle/… 我猜应该是一个解决方案。
-
@coroutineDispatcher 如果我正在使用
Transformations之一,我该如何继续使用emit()? -
使用 Flow 而不是 LiveData?
标签: android android-livedata kotlin-coroutines