【问题标题】:How to update a variable in Activity A from Activity B, every time the variable changes?每次变量更改时,如何从活动 B 更新活动 A 中的变量?
【发布时间】:2020-08-08 10:23:39
【问题描述】:

Image description of the problem

我有一个音乐播放器应用。活动 A 是我的主菜单。您从 Activity A 的列表中选择一首歌曲,然后带着您的意图进入 Activity B(传递诸如 songTitle、songArtist 等数据)。

当我在 Activity B 中按下后退按钮时,它会带着我回到 Activity A 意图(传递诸如 songTitle、songArtist 等数据)。我在底部的 Activity A 中显示当前正在播放的歌曲名称和艺术家姓名。

我的问题是,如果我在 Activity A 中,然后歌曲自动更改为 ActivityB 中的下一首歌曲,则歌曲标题和艺术家姓名在 Activity A 中不会更改,因为我没有从 Activity 传递任何意图B 到 A。

我尝试在 onStart() 中使用 SharedPreferences,但文本中的更改不适用,除非我按下设备上的主页按钮并再次返回到 Activity A。

如何监听另一个活动中的变量变化并相应地更新我的 TextViews?

【问题讨论】:

  • Activity B 被背压完成后如何运行?
  • 我正在使用 FLAG_ACTIVITY_REORDER_TO_FRONT 进行两个活动更改。媒体播放器也可以在后台运行。

标签: android android-intent sharedpreferences


【解决方案1】:

你应该看看 LiveData

LiveData 在可观察数据类上。你可以从这里找到更多关于它的信息: LiveData Android

【讨论】:

  • 我以前听说过这个,但没有给它机会。我会仔细看看的。谢谢。
【解决方案2】:

您有两种选择。您可以将这些活动转换为片段,然后您将能够与活动范围视图模型共享数据我相信这是一个不错的选择,您应该这样做,但是如果由于某种原因您拥有庞大的代码库并且很难制作这些活动片段,您可以在 ActivityA 中添加 onActivityResult 并从 ActivityB 返回当前音乐 id 或其他内容。

【讨论】:

  • 感谢您的回答。将活动 B 更改为片段将非常困难,但并非不可能。你能详细说明 onActivityResult 的用法吗?我认为它需要有意识地开始活动。我的问题是我在主菜单(活动 A)中等待,而活动 B 中发生了变化。我该如何实现呢?
  • 哦,我没有很好地阅读您的问题,对此感到抱歉。当单击返回并返回到 ActivityA 时,ActivityB 被销毁,音乐将通过某种服务进行管理,对吗?
  • 我覆盖了ActivityB中的onBackButtonPressed,并使用intent来手动启动ActivityA。我也使用 FLAG_ACTIVITY_REORDER_TO_FRONT,这样媒体播放器就会在后台继续播放。
【解决方案3】:

我已经用SharedPreferences解决了我的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-23
    • 2019-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多