moh*_*sen 1 java android kotlin android-viewmodel android-architecture-navigation
所以我的问题很简单。viewmodel 需要一个范围才能保持活力。例如活动或片段。所以我想一定有一个与 相关的类navgraph在多个片段中幸存下来。那么它是如何实现的呢?
val viewModel by navGraphViewModels(R.id.my_nav_graph).
Run Code Online (Sandbox Code Playgroud)
根据使用 NavBackStackEntry 文档的参考目的地:
从 Navigation 2.2.0 开始,您可以通过调用并向其传递目的地 ID来获取对
NavBackStackEntry导航堆栈上任何目的地的引用。NavController.getBackStackEntry()
返回的结果在目标级别
NavBackStackEntry提供Lifecycle、和 SavedStateRegistry。a ViewModelStore这些对象在返回堆栈上的目标的生命周期内有效。当关联的目标从返回堆栈中弹出时,生命周期将被销毁,状态将不再保存,并且所有 ViewModel 对象都会被清除。
因此,当您调用 时by navGraphViewModels(),将NavBackStackEntry使用该导航图的 。由于当NavBackStackEntry您位于该图中的任何目的地时,它仍然保留在返回堆栈上,因此NavBackStackEntry无论您调用该图中的哪个目的地,都会返回相同的内容by navGraphViewModel(),从而确保这些多个片段都具有共享范围。一旦您从返回堆栈中弹出所有片段,导航图及其NavBackStackEntry也会弹出,从而清除共享状态。
| 归档时间: |
|
| 查看次数: |
687 次 |
| 最近记录: |