Android 通过 NavDirections 争论(Safe-Args)将 ViewModel 发送到 Fragment
Android send ViewModel to Fragment via NavDirections arguement (Safe-Args)
我有一个具有以下架构的应用程序:
Navigator
是一个自定义 class,它包含 NavController
Cooridnator
持有 Navigator
Cooridnator
告诉 Navigator
“启动”framgent 并将 ViewModel
传递给它
Navigator
要求 NavController
导航到 NavDirections
并提供所需的参数(使用 Safe-Args)
现在这里的问题是,如果我想发送 ViewModel
作为参数,它需要是 Parcelable 及其所有底层 classes(这将使我的大部分代码 Parcelable,这并不是真正需要的)。
那么有没有一种方法可以在不使所有内容都可打包或不使用 Dagger 的情况下做到这一点? (不喜欢 Dagger,因为它给代码增加了太多的复杂性...)
我可以在 Fragment 中有一个 lateinit
字段并手动设置它,但似乎无法从 NavDirections
访问 Fragment
知道我该怎么做吗?
首先:您在安全参数中传递的是“数据”,而您的视图模型是逻辑。这意味着您的数据会随着时间的推移而变化(其中一个例子就是过时),但只要 viewmodel 不变,它的逻辑就会保持不变。因此,传递视图模型本身对我来说没有意义 - 最好的办法是传递它的状态快照,但我怀疑这就是你想要的。
所以是的,你应该使用 DI 并且有替代匕首复杂性的方法。您可以使用 koin 进行试验(因为我在您的标签列表中看到了 kotlin),这里有一些关于它的基本概述 https://shorturl.at/bflFL(中等)。对于 android 世界,您还可以尝试使用 Hilt 作为 Dagger 的简化替代品。
我有一个具有以下架构的应用程序:
Navigator
是一个自定义 class,它包含NavController
Cooridnator
持有Navigator
Cooridnator
告诉Navigator
“启动”framgent 并将ViewModel
传递给它Navigator
要求NavController
导航到NavDirections
并提供所需的参数(使用 Safe-Args)
现在这里的问题是,如果我想发送 ViewModel
作为参数,它需要是 Parcelable 及其所有底层 classes(这将使我的大部分代码 Parcelable,这并不是真正需要的)。
那么有没有一种方法可以在不使所有内容都可打包或不使用 Dagger 的情况下做到这一点? (不喜欢 Dagger,因为它给代码增加了太多的复杂性...)
我可以在 Fragment 中有一个 lateinit
字段并手动设置它,但似乎无法从 NavDirections
知道我该怎么做吗?
首先:您在安全参数中传递的是“数据”,而您的视图模型是逻辑。这意味着您的数据会随着时间的推移而变化(其中一个例子就是过时),但只要 viewmodel 不变,它的逻辑就会保持不变。因此,传递视图模型本身对我来说没有意义 - 最好的办法是传递它的状态快照,但我怀疑这就是你想要的。
所以是的,你应该使用 DI 并且有替代匕首复杂性的方法。您可以使用 koin 进行试验(因为我在您的标签列表中看到了 kotlin),这里有一些关于它的基本概述 https://shorturl.at/bflFL(中等)。对于 android 世界,您还可以尝试使用 Hilt 作为 Dagger 的简化替代品。