Android通过NavDirections参数(安全参数)将ViewModel发送到Fragment
我有一个具有以下体系结构的应用程序:Android通过NavDirections参数(安全参数)将ViewModel发送到Fragment,android,kotlin,dependency-injection,android-architecture-navigation,android-safe-args,Android,Kotlin,Dependency Injection,Android Architecture Navigation,Android Safe Args,我有一个具有以下体系结构的应用程序: Navigator是一个保存NavController Cooridnator持有Navigator Cooridnator告诉Navigator启动框架并将ViewModel传递给它 Navigator要求NavController导航到NavDirections并提供所需的参数(使用安全参数) 现在的问题是,如果我想将ViewModel作为参数发送,它需要是可打包的,并且它的所有底层类也需要打包(这将使我的大部分代码可以打包,而实际上并不需要) 那么
是一个保存Navigator
NavController
持有Cooridnator
Navigator
告诉Cooridnator
启动框架并将Navigator
传递给它ViewModel
要求Navigator
导航到NavController
并提供所需的参数(使用安全参数)NavDirections
ViewModel
作为参数发送,它需要是可打包的,并且它的所有底层类也需要打包(这将使我的大部分代码可以打包,而实际上并不需要)
那么,有没有一种方法可以做到这一点,而不必把所有东西都打包或使用匕首?(不喜欢Dagger,因为它给代码增加了太多的复杂性…)
我可以在片段中设置一个lateinit
字段并手动设置它,但似乎无法从NavDirections
你知道我该怎么做吗?首先:在安全参数中传递的是“数据”,而viewmodel是逻辑。这意味着您的数据可以随着时间的推移而改变(其中一个例子就是过时),但只要viewmodel保持不变,它的逻辑就会保持不变。因此,传递viewmodel本身对我来说没有意义——您最好传递它的状态快照,但我怀疑这是您想要的
所以,是的,您应该使用DI,并且有替代匕首复杂性的方法。您可以尝试使用koin(因为我在您的标记列表中看到了kotlin),这里有一些关于它的基本轮廓(中等)。对于android世界,你也可以尝试将剑柄作为Dagger的简化替代品。哦,没错,没有提到关于安全args的部分…(我对android和Kotlin有些陌生)。谢谢,我会查一下koin!可以肯定的是,没有办法通过公共属性(例如)将viewModel传递给片段?当然可以,但是可以从内部传递,因为片段有自己的生命周期。这里有更多内容,但我们在使用NavController/NavDirections时无法访问该片段,因此您将如何操作?我最终使用了Koin,Wayyy,比Dagger更容易理解和使用!