所以我的问题很直截了当。视图模型需要一个范围来保持生命。如活性或碎片。所以,我想一定有一个与navgraph相关的类,它通过多个fragments.so生存下来,它是如何实现的?
val viewModel by navGraphViewModels(R.id.my_nav_graph).发布于 2020-08-08 18:06:50
从导航2.2.0开始,您可以通过调用
a ViewModelStore,来获得导航堆栈上任何目的地的引用,并将其传递给目标ID。返回的NavBackStackEntry在目标级别提供了一个Lifecycle、Lifecycle和SavedStateRegistry。这些对象在后端堆栈上的目标的生存期内有效。当关联的目标从后端堆栈中弹出时,生命周期被销毁,状态不再保存,任何ViewModel对象都被清除。
因此,当您调用by navGraphViewModels()时,使用的是导航图的NavBackStackEntry。因为当您在图中的任何一个目标上时,NavBackStackEntry仍然在后台堆栈上,所以不管在图中调用by navGraphViewModel()的目的地是什么,都会返回相同的NavBackStackEntry,从而确保这些多个片段都有一个共享的作用域。一旦从后端堆栈中弹出所有片段,导航图及其NavBackStackEntry也会弹出,从而清除共享状态。
https://stackoverflow.com/questions/63317725
复制相似问题