我正在尝试实施Google推荐的体系结构,他们在一个教程中显示了此图:
所以我有一个MainActivity,当应用启动时,它应该可以从互联网上获取一些数据。我在存储库中执行那些网络操作。现在,我的问题是我不知道如何在活动和存储库之间正确通信。例如,MainActivity启动,并在存储库获取数据时立即显示圆形进度条。将数据插入数据库后,如何在MainActivity中停止动画?我想我可以在observe()
上呼叫LiveData
并等待onChanged()
。有没有更好的方法?如果没有新数据怎么办?这样onChanged()
就不会被称为...
也许当没有数据时,我可以将存储库中的意图发送给MainActivity,以便MainActivity知道它应该停止动画,如果它没有收到意图,它只是等待onChanged()
?
我想我对onChanged()
方法不满意,因为我永远无法确定它所对应的操作。可能在来自网络的数据到达之前,插入了一些其他数据,这些数据触发了onChanged()
,这将使加载动画在应有的前提下停止。
答案 0 :(得分:0)
关于您在评论中的问题,我相信也可以回答您的主要问题。
您需要从您的UI(活动/片段)观察LiveData
中的进度ViewModel
。可以使用Boolean
(LiveData<Boolean>
)。表示进度视图是否可见。
这又需要从存储库中获取相同的LiveData
(在存储库中声明为MutableLiveData
)。然后,您将更新发布到进度MutableLiveData
中。
现在,每当MutableLiveData
收到更改时,由于共享变量引用,您的ViewModel
中就存在该更改,该更改将传递给UI中的观察者。
-
或者,您可以从存储库中提取数据的方法返回LiveData<Boolean>
。这样您就可以在用户界面中观察到了。
除了布尔型,还可以使用包含更多信息的更复杂的结构。消息,错误代码等。