【问题标题】:Android: Different ViewModel instance for different Navigation Graph java/kotlinAndroid:不同导航图java/kotlin的不同ViewModel实例
【发布时间】: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


【解决方案1】:

我可以建议您对每个图使用 FragA 的 SubFrag1、SubFrag2 ...。

open class FragA

class SubFrag1: FragA()

class SubFrag2: FragA()

【讨论】:

  • 谢谢,我希望我可以避免延长课程,一定会记住的
  • 我看不到其他解决方案,因为在任何片段中创建的视图模型都将存在并被重复使用,直到它被销毁。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多