我知道一个Activity / Fragment必须创建一个ViewModel,并且可以从ViewModelFactory创建ViewModel。而且ViewModel本身正在使用一个数据存储库,该数据存储库处理来自数据库或网络的数据。而且ViewModel不是单例。
例如,我有一个活动,其中有两个片段,片段A和片段B,但我只能一个一个地访问它们。在片段A中,我从存储库中加载了一些数据,这些存储库来自网络或数据库。当我导航到片段B时,片段A中的数据会丢失,因此我必须从网络或数据库中加载数据,这会花费一些时间。因此,我希望将数据存储在运行时中。
我的问题是,解决此问题的最佳方法是什么?在存储库中创建单例可以吗?
答案 0 :(得分:1)
您需要使用一个共享的viewModel,这是一个在片段之间共享的ViewModel,并且可以在某些片段之间导航。
实现取决于您在项目中使用什么。您可以在活动中创建ViewModel并从片段中访问它们,并将共享数据放入此ViewModel中。或者,如果您使用的是导航组件,则每个导航图可以具有一个共享的ViewModel。并使用匕首和古恩语,可以为ViewModel定义服装范围以使其生存。请参阅以下链接:
Share data between fragments
Share data between fragments with shared viewModel