Android 通过 NavDirections 争论(Safe-Args)将 ViewModel 发送到 Fragment

Android send ViewModel to Fragment via NavDirections arguement (Safe-Args)

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

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

那么有没有一种方法可以在不使所有内容都可打包或不使用 Dagger 的情况下做到这一点? (不喜欢 Dagger,因为它给代码增加了太多的复杂性...)

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

访问 Fragment

知道我该怎么做吗?

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

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