简单用例
我正在使用 MVVM 建筑和Android Architecture Components在我的应用程序中。
用户登录后,我正在获取多个网络数据并希望从不同的 ViewModels 访问它附不同 Activity 生命周期。
我不想使用 Room Persistence Library在我的应用程序中。
我看到了一些关于共享 的问题查看型号 之间 Activity 或使用 LiveData作为静态成员,但我认为大多数情况下我们需要在多个屏幕中访问相同的数据。
我想分享一个解决方案,但如果有更好的解决方案或对此有问题,请发表您的想法。
最佳答案
这个想法是有一个 Singleton 存储库 , 共享一个 实时数据 消费者之间( ViewModels )。
class SharedLiveDataRepository(val dataSource: MyDataSource) {
// This LiveData is shared across consumers
private val result = MutableLiveData<Long>()
fun loadData(): LiveData<Long> {
if (result.value == null) {
result.value = dataSource.getData()
}
return result
}
}
如果出于某种原因您想刷新数据,loadItem
方法看起来像这样 fun loadData(refresh: Boolean = false): LiveData<Long> {
if (refresh == true) {
result.value = null
}
if (result.value == null) {
result.value = dataSource.getData()
}
return result
}
请注意:为了刷新数据,可能会看到故障。想象一个场景,两个 Activity 之间有转换,第一个是观察 LiveData,第二个开始刷新它。
我认为上述问题的解决方案是在第一个 Activity 中进行刷新,然后导航到下一个 Activity 。
关于android - 如何在 Android 应用程序中共享 LiveData 实例?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56521969/