android - Android 通过 NavDirections 争论(Safe-Args)将 ViewModel 发送到 Fragment
问题描述
我有一个具有以下架构的应用程序:
Navigator
是一个自定义类,它包含NavController
Cooridnator
持有Navigator
Cooridnator
告诉Navigator
“启动”framgent并将其传递ViewModel
给它Navigator
要求NavController
导航到 aNavDirections
并提供所需的参数(使用 Safe-Args)
现在这里的问题是,如果我想发送ViewModel
as 参数,它需要是 Parcelable 以及它的所有底层类(这将使我的大部分代码 Parcelable,这并不是真正需要的)。
那么有没有办法做到这一点而不使一切 Parcelable 或使用 Dagger ?(不喜欢 Dagger,因为它给代码增加了太多的复杂性......)
我可以lateinit
在 Fragment 中有一个字段并手动设置它,但似乎无法访问 FragmentNavDirections
关于我如何做到这一点的任何想法?
解决方案
首先:您传入的安全参数是“数据”,而您的视图模型是逻辑。这意味着您的数据可能会随着时间的推移而发生变化(其中一个例子是过时的),但只要视图模型不变,它的逻辑就会保持不变。因此,传递视图模型本身对我来说没有意义——你最好传递它的状态快照,但我怀疑这就是你想要的。
所以是的,您应该使用 DI,并且有替代匕首复杂性的方法。您可以尝试使用 koin(因为我在您的标签列表中看到了 kotlin),这里有一些关于它的基本功能的概述https://shorturl.at/bflFL(中)。您还可以尝试使用 Hilt 作为 Dagger 的简化替代品,适用于 android 世界。
推荐阅读
- c# - 将自定义数字格式模式设置为 fr-CA 而不指定文化
- json - jq:如何有条件地更改数组值
- docker - Docker 绑定挂载在 Windows 上托管但不在 linux 上处理 odbc.ini 文件
- r - 需要帮助在 R 中将“[some word][space][more words]”替换为 [some word]
- python - 尝试在 keras 中拟合 CNN 模型时发生“InvalidArgumentError”?
- python - Accelerate 和 NumPy 对 FFT 产生不同的结果
- entity-framework - 防止实体框架代码首先生成无关的外键,而不使用流利?
- javascript - 如何在 React 中渲染多个嵌套数组对象?
- c# - 一种泛型字典
- php - 用 vue 替换 laravel 刀片