【发布时间】:2020-02-03 08:11:59
【问题描述】:
我正在使用 LiveData 的版本“androidx.lifecycle:lifecycle-livedata-ktx:2.2.0-alpha05”。一旦我的 LiveData 块成功执行,我想明确触发它再次执行,例如
- 我导航到一个片段
- 用户数据加载
- 我在同一个片段中单击删除 btn
- 用户数据应该刷新
我有一个片段,我在其中观察我的 LiveData,一个带有 LiveData 和 Repository 的 ViewModel:
视图模型:
fun getUserLiveData() = liveData(Dispatchers.IO) { val userData = usersRepo.getUser(userId) emit(userData) }
片段:
viewModel.getUserLiveData.observe(viewLifecycleOwner, androidx.lifecycle.Observer {..
然后我试图实现这样的期望行为:
viewModel.deleteUser() viewModel.getUserLiveData()
根据 LiveData 块下面的文档,如果它已成功完成,并且如果我在 LiveData 块中放置 while(true),则我的数据会刷新,但我不会想要这样做,因为我需要响应式更新我的视图。
如果[block]成功完成或由于[LiveData]以外的原因被取消 变为非活动状态,即使在 [LiveData] 处于活动状态后,它也不会重新执行 非活动周期。
也许我错过了如何重用相同的 LiveDataScope 来实现这一点?任何帮助将不胜感激。
【问题讨论】:
-
你找到解决办法了吗
-
很遗憾,没有。
-
你的仓库叫什么?是房间数据库还是服务器调用?
-
@MojtabaHaddadi 它从服务器获取数据。
-
祝你好运@JanasC12,我现在处于同样的位置。所有这些花哨的 api 都是白费的,哈哈
标签: android kotlin android-livedata kotlin-coroutines android-viewmodel