片段之间有多种通信方式吗?我们什么时候应该使用它们?

There are multiple ways communicating between fragments? When should we use them?

提问人:Vikash Kumar Tiwari 提问时间:11/18/2023 最后编辑:karelVikash Kumar Tiwari 更新时间:11/21/2023 访问量:24

问:

有多种方法可以在片段之间进行通信。

  1. 共享视图模型
  2. Fragment 结果 API
  3. 导航组件
    a. 安全参数
    b. 参数(捆绑包)
  4. 使用 dagger2 依赖项注入自定义作用域 ViewModel(ViewModel 相同/Singleton 在同一作用域中)

我很困惑在哪种情况下应该使用哪种方法?

在 Android 中的片段之间进行通信。

android android-fragments 匕首-2 android-jetpack-navigation

评论


答:

0赞 Nazarii Moshenskiy 11/18/2023 #1

在传递少量数据时,您可能希望使用 Fragment Result API 和其他与 - 相关的方法,因为您可能不希望序列化和反序列化大量数据(如果是 或 列表)。我相信它有一些大小限制。BundleParcelableParcelables

但对于设计良好的应用程序来说,这不是问题。

要记住的问题是,只能将单个侦听器和结果注册到给定的密钥。如果为同一密钥注册了多个侦听器,则该侦听器将替换为最新的侦听器。

共享可能适合您,除非它是单个活动应用程序,并且您将其范围限定为活动提供程序,以便能够共享它以获取片段,并且它将作为单一实例放置在内存中。在不需要时将其保存在RAM中似乎是一种非常愚蠢的方法。ViewModel

如果共享数据相当大,您想将共享数据保存在其中吗?使用此方法时,应牢记关注点的分离。如果它背后有一个相对较小的逻辑,那可能是可以的,但有时它可能太多了。ViewModel