1

我有一个具有以下架构的应用程序:

  • Navigator是一个自定义类,它包含NavController
  • Cooridnator持有Navigator
  • Cooridnator告诉Navigator“启动”framgent并将其传递ViewModel给它
  • Navigator要求NavController导航到 aNavDirections并提供所需的参数(使用 Safe-Args)

现在这里的问题是,如果我想发送ViewModelas 参数,它需要是 Parcelable 以及它的所有底层类(这将使我的大部分代码 Parcelable,这并不是真正需要的)。

那么有没有办法做到这一点而不使一切 Parcelable 或使用 Dagger ?(不喜欢 Dagger,因为它给代码增加了太多的复杂性......)

我可以lateinit在 Fragment 中有一个字段并手动设置它,但似乎无法访问 FragmentNavDirections

关于我如何做到这一点的任何想法?

4

1 回答 1

1

首先:您传入的安全参数是“数据”,而您的视图模型是逻辑。这意味着您的数据可能会随着时间的推移而发生变化(其中一个例子是过时的),但只要视图模型不变,它的逻辑就会保持不变。因此,传递视图模型本身对我来说没有意义——你最好传递它的状态快照,但我怀疑这就是你想要的。

所以是的,您应该使用 DI,并且有替代匕首复杂性的方法。您可以尝试使用 koin(因为我在您的标签列表中看到了 kotlin),这里有一些关于它的基本功能的概述https://shorturl.at/bflFL(中)。您还可以尝试使用 Hilt 作为 Dagger 的简化替代品,适用于 android 世界。

于 2020-06-29T03:37:43.427 回答