【问题标题】:Best way to communicate between 2 Fragments in different activities?在不同活动中的 2 个片段之间进行交流的最佳方式?
【发布时间】:2022-08-22 05:23:40
【问题描述】:

我有一个场景活动一有标签,片段 1,2,3,4.片段 2 在这里打开活动 B其中有多个片段 1,2,3,4.现在从活动 B(片段 4),我想将结果发送回活动 A 的片段 2,它在后台。最好的方法是什么?

目前,我正在考虑使用 Result API 打开 Activity B,并从 Activity B 的 Fragment 4 以某种方式设置 Result(现在确定如何)。我应该先在活动 B 中设置结果,然后再为活动 A 的片段 2 设置结果吗?

  • 这听起来像是一场噩梦。为什么不坚持使用单一的 Activity 架构?或者至少是多活动,每个活动不超过一个片段?
  • 也许是一个单例 livedata 变量?
  • 这相当于在 2 个活动之间进行通信。所以结果 API 是要走的路。
  • @ADM 感谢您的评论,并与片段 4 中的活动 B 进行交流。我应该使用共享视图模型吗?
  • 您可以直接从 Fragment 使用 ResultAPI .. 如果您在其他 Fragment 中使用,请求代码会有所不同.. 除非您必须这样做,否则您不必让 Activity 参与其中.. 如果您使用 Single Activity Arch the Fragments还有一个resultAPI来发回数据..

标签: android kotlin android-fragments


【解决方案1】:

两个 Fragment A 和 Fragment B 之间通信的最佳方式是通过 viewModel ViewModel 被创建并在两个片段之间共享,您从片段 A 设置值并使用片段 B 中的 getValue() 方法访问该值。 ViewModel 与两个 Fragment 共享相同的实例

【讨论】:

    【解决方案2】:

    有两个非常简单的解决方案:

    1. 从任何活动或片段(在您的情况下,从活动 B 片段 4)发送 Intent,并在您的活动 A 中设置一个意图过滤器以接收该意图。您必须在 Activity A 的onNewIntent() 中处理该意图,然后将数据转发到您想要的任何片段

    2. 使用生命周期组件,例如 LiveData 来执行此操作。您需要在 Java 中设置 Singleton 类或在 Kotlin 中设置 Object,然后在该类中创建 LiveData 变量。然后你可以设置你的活动 B 来更新 LiveData 变量,并设置你的活动 A 来观察它的变化

    【讨论】:

    • 第二个选项Singleton 和LiveData 是一个糟糕的解决方案..
    • 你怎么会那么说?这完全取决于 OP 打算如何使用它。根据他们的应用架构,他们可能更喜欢将数据发布到 LiveData 并在它发生变化时使用它,而不是必须发送意图并处理它们,以及随之而来的所有生命周期状态管理
    猜你喜欢
    • 2016-10-12
    • 1970-01-01
    • 2012-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多