【问题标题】:Android: How can I exchange data between multiple still running activities directly?Android:如何直接在多个仍在运行的活动之间交换数据?
【发布时间】:2016-08-13 23:09:06
【问题描述】:

我需要一种在两个活动之间直接交换数据的好方法。我的所有跑步活动都有一个相同的自定义标题,在我的第一个活动中,我在该标题中显示 GPS 状态并带有图像(已找到/仍在搜索)。 LocationListener 是我的第一个活动,如果 GPS 状态发生变化,我想更新我正在运行/显示的活动的所有标题。目前我只能更改我的第一个活动的标题。

我知道我可以通过 SharedPreferences 和 Intents 交换数据,后者将数据作为 Extras 传递,但据我所知,我只能在其他活动的 onCreate 方法中接收 extras。

我想要的是,在仍在运行的活动上更新数据(传递了 onCreate)。

希望你明白我的意思:)

示例场景:

我启动我的应用程序。 GPS 定位正在运行(第一个活动)。同时我导航到我的应用程序的另一个活动。现在,如果 GPS 状态发生变化,我需要更新当前显示的第二个活动的标题。

有没有办法解决这个问题?

谢谢

【问题讨论】:

  • 使用一个Activity 和两个Fragments 而不是两个Activities
  • 嗯,你可以使用 SingletonPattern 或 ObserverPattern
  • 就像 Squonk 所说,您可以使用单个活动并拥有许多片段。该活动将处理每个片段之间的数据。
  • 好的,非常感谢您的快速帮助。我尝试用碎片解决它。

标签: java android android-layout android-intent


【解决方案1】:

除了创建一个包含两个片段的活动之外,还有一种用于其他场景的棘手方法:

比方说,如果你有一个变量(让标题栏中的文本是一个变量)需要保持更新,而不能使用广播(不允许消息丢失或活动被杀死),你可以使用从共享偏好中保存文本,并每次提取它。

例如,Activity A 使用来自 sharepreference 的 String,key 为“title”,默认值为您的应用名称。 B、C或D更新标题文本后,A也需要更新。因此,您只需更新共享偏好中关键“标题”的值。 A被撤销后,会再次抓取sharedPreference中的title,并相应更新title。

希望对您有所帮助。 :-)

【讨论】:

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