【问题标题】:Selectively pass information from a fragment to an activity选择性地将信息从片段传递到活动
【发布时间】:2015-12-13 17:05:05
【问题描述】:

官方android documentation建议将数据从fragment传递到activity,应该在fragment中定义一个接口,然后在activity中实现。

但是,假设您有一个片段被多个活动使用,并且您只需将数据传递给某个活动。由于这是 Java,因此该解决方案需要我为所有活动实现接口,恕我直言,这不是一个可行的解决方案。

有哪些方法可用并推荐将数据从片段仅传递到特定活动?

【问题讨论】:

  • getActivity() 转换为“特定活动”的类,然后对其调用方法。
  • @CommonsWare - 好点。你知道为什么文档建议使用getActivity() 之上的接口吗?
  • 如果有N个可能的托管活动,通常片段和这些活动之间的关系是相同的。因此,建议使用基于接口的通信。你的情况恰好与此不符。该文档不会尝试记录任何和所有模式。哎呀,考虑到我可能已经超越了 Google,当他们涵盖 任何 模式时,我很高兴。

标签: android android-fragments android-activity


【解决方案1】:

我偶尔会通过将带有捆绑包或其他数据结构的片段中的广播消息发送到活动中的广播接收器来解决此问题。它可能不完全规范,但它可以工作并且不需要您在不需要对来自片段的消息采取行动的活动中实现任何东西。

【讨论】:

  • 您是否有一些示例代码或对此类代码的引用?
  • 这只是一个标准的广播。创建一个意图并在片段中使用 sendBroadcast 发送它,并像处理活动中的 BroadcastReceiver 中的任何其他内容一样处理它。我稍后会用一些示例代码更新我的答案,但在那之前,这里有一个示例:stackoverflow.com/questions/3907713/…
  • Otto 库也在做同样的事情,但更简单、更易读等
【解决方案2】:

出于完全相同的目的,我使用Otto library。它非常适合构建与应用程序的其他部分非常分离的代码。 Otto 是一个非常简单的库,更多高级开发人员正在迁移到RX Java 领地

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多