There are multiple ways to communicate between fragments
(1)shared ViewModel
(2) Fragment Result Api
(3) Navigation Component
(a) Safe Args
(b) Arguments(Bundle)
(4)Custom scoped ViewModel by using dagger2 dependency injection (ViewModel is same / Singleton in the same scope)
我很困惑在哪种情况下应该使用哪种方法?
android中fragment之间的通信
当您传递少量数据时,您可能需要使用 Fragment Result API 和其他
Bundle
相关方法,因为如果数据是 Parcelable
或 Parcelables
列表,您可能不希望序列化和反序列化大块数据
。而且我相信它有一定的尺寸限制。
但这对于设计良好的应用程序来说不是问题。
要记住的问题是只能将单个侦听器和结果注册到给定的键。如果同一个 key 注册了多个监听器,它将被最新的监听器替换。
共享
ViewModel
可能适合您,除非它是单活动应用程序,并且您使用活动提供程序将其范围限定为能够共享片段,并且它将作为单例存在于内存中。在不需要的时候将其保存在 RAM 中似乎是一种非常愚蠢的方法。
如果共享数据相当大,您是否想将其保存在
ViewModel
中?使用此方法时,您应该记住关注点分离。如果背后有一个相对较小的逻辑可能没问题,但有时可能会太多。