首页 > 解决方案 > Android 通过 NavDirections 争论(Safe-Args)将 ViewModel 发送到 Fragment

问题描述

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

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

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

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

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

标签: androidkotlindependency-injectionandroid-architecture-navigationandroid-safe-args

解决方案


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

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


推荐阅读