【发布时间】:2020-11-01 18:19:25
【问题描述】:
我正在使用 Android 导航组件,并且我有一个 FragA 片段,它在多个导航图中被重用,我希望在每个图中为此 fragA 有不同的 ViewModel 实例。
我环顾四周,发现 by navGraphViewModels(R.id.child_graph) 但这需要知道我来自哪个图表,但我不知道,因为 FragA 正在被重用。
我无法在参数/包中传递图形,因为像 private val childGraphScopedViewModel: ChildGraphScopedViewModel by navGraphViewModels(arguments.getInt) { 这样的操作将不起作用,因为在调用该行代码时参数仍然为 Null。
所以我的问题是如何使图形 id 动态化?
我是否必须编写镜像by navGraphViewModels 的自定义实现?
(另外我可能需要这样的东西才能在 java/kotlin 中工作)
【问题讨论】:
-
你要
different instances of ViewModel同班还是不同班? -
@denvercoder9 在 2 个不同的导航图中打开的同一 FragA 的同一 ViewModelA 的不同实例
-
使用
by viewModels()而不是by navGraphViewModels(..)。请阅读这个答案和 cmets 以及 stackoverflow.com/a/61974340/2235972 这可能会解释一些东西。另外,请阅读viewModels()和navGraphViewModels()上的文档
标签: java android kotlin android-viewmodel android-navigation