在一个奇怪的场景中,我能够从API中获取响应,并通过观察viewmodel中的livedata在其中一个片段中看到它,但在另一个片段中没有显示任何响应。
我有一个片段,我把一些值,这些值进一步通过viewmodel -〉repository从一个api中获取数据,然后我在不同的片段中使用一个变量观察这些数据。
我只能从发送值的片段中获取数据,但无法从其他片段中观察。
有什么可能的原因吗?
如果有任何代码的要求,让我知道我会添加。
编辑1:我发现应该使用一个叫做Shared ViewModel的东西。所以我试着实现它。我唯一要做的就是把我的viewModel
实现改为activityViewModels
。但是事情似乎还是不太好。
不确定,但我在整个应用程序中实现ViewModel可能会有问题。
目前我采用的是这种模式:数据来自api -〉仓库(我在其构造函数中传递api)-〉ViewModel(我在其构造函数中传递仓库)。
当我在ViewModel的构造函数中传递存储库示例时,我创建了一个ViewModelFactory,它在创建ViewModel时传递存储库。
记住这一切,我在MainApplication
类中创建了一个全局初始化的仓库,如下所示:
val myRepoInstance by lazy { myReposiotry(myApiClient) }
我在这个片段中实现了它,如下所示:
private val myViewModelInstance: MyViewModel by activityViewModels {
ViewModelFactory((context?.applicationContext as MainApplication).myRepoInstance)
}
//Rest of the code...
2条答案
按热度按时间f4t66c6m1#
你只需要在你的第一个片段工厂,而不是在你的第二个片段
对于第一个片段,执行以下操作
私有瓦尔viewModel:按活动创建的共享视图模型视图模型{共享视图模型.工厂(...)}
对于第二个片段,执行此操作(不创建工厂)
私有瓦尔viewModel:活动视图模型()的共享视图模型
此链接为详细信息https://medium.com/@lucasnrb/advanced-viewmodels-part-iii-share-a-viewmodel-between-fragments-59c014a3646
tuwxkamq2#
我已经创建了一个类似案例,它运行良好,请检查是否有帮助
已添加FragmentA的活动,单击此处的按钮时,我将更新ViewModel FragmentA中的值。在此处,我将更新SharedViewModel FragmentB中的值,在此处,我们将观察sharedViewModel中的更新值。
第一次
在此处输入映像说明[
[