[英]how does navGraph viewModel work under the hood?
所以我的问题很简单。 viewmodel 需要一个 scope 才能存活。 例如活动或片段。 所以我想一定有一个navgraph
与通过多个片段存活的导航图相关联。那么它是如何实现的?
val viewModel by navGraphViewModels(R.id.my_nav_graph).
根据参考使用 NavBackStackEntry 文档的目的地:
从 Navigation 2.2.0 开始,您可以通过调用
NavController.getBackStackEntry()
对导航堆栈上任何目的地的NavBackStackEntry
的引用,并将目的地 ID 传递给它。
返回的
NavBackStackEntry
在目标级别提供Lifecycle
、a ViewModelStore
和 SavedStateRegistry 。 这些对象在后端堆栈上的目标的生命周期内有效。 当关联的目的地从返回堆栈中弹出时,生命周期被销毁,state 不再保存,并且所有 ViewModel 对象都被清除。
因此,当您by navGraphViewModels()
调用时,将使用该导航图的NavBackStackEntry
。 当您位于该图中的任何目的地时, NavBackStackEntry
仍保留在后堆栈上,因此无论您by navGraphViewModel()
调用该图中的哪个目的地,都会返回相同的NavBackStackEntry
,确保这些多个片段都具有共享scope。 一旦您从返回堆栈中弹出所有片段,导航图及其NavBackStackEntry
也会弹出,清除共享的 state。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.