首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >navGraph viewModel是如何在引擎盖下工作的?

navGraph viewModel是如何在引擎盖下工作的?
EN

Stack Overflow用户
提问于 2020-08-08 16:27:36
回答 1查看 505关注 0票数 1

所以我的问题很直截了当。视图模型需要一个范围来保持生命。如活性或碎片。所以,我想一定有一个与navgraph相关的类,它通过多个fragments.so生存下来,它是如何实现的?

代码语言:javascript
复制
val viewModel by navGraphViewModels(R.id.my_nav_graph).
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-08 18:06:50

根据使用NavBackStackEntry文档引用目标

从导航2.2.0开始,您可以通过调用a ViewModelStore,来获得导航堆栈上任何目的地的引用,并将其传递给目标ID。返回的NavBackStackEntry在目标级别提供了一个LifecycleLifecycle和SavedStateRegistry。这些对象在后端堆栈上的目标的生存期内有效。当关联的目标从后端堆栈中弹出时,生命周期被销毁,状态不再保存,任何ViewModel对象都被清除。

因此,当您调用by navGraphViewModels()时,使用的是导航图的NavBackStackEntry。因为当您在图中的任何一个目标上时,NavBackStackEntry仍然在后台堆栈上,所以不管在图中调用by navGraphViewModel()的目的地是什么,都会返回相同的NavBackStackEntry,从而确保这些多个片段都有一个共享的作用域。一旦从后端堆栈中弹出所有片段,导航图及其NavBackStackEntry也会弹出,从而清除共享状态。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63317725

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档