通过后台活动事件更新活动状态

3
我有两个活动A和B。 A有一个包含歌曲列表的recyclerView。当我点击其中一个时,命令会传递到B并开始播放它。 B具有一个onCompletionListener(),所以它会自动更改并播放歌曲。当回到活动A时,当前播放歌曲的名称显示在textView中。问题是,当后台更改歌曲时,textView无法自动更新。 我想到的一个解决方案是使该textView静态,并从B中的OnCompletionListener进行更改,但我认为这不够有效。有更好的方法吗?

  1. 在A中使用本地广播接收器,并在B上播放歌曲时发送广播。 或者
  2. 使用startActivityForResult()启动B,通过onActivityResult()向A返回一些值。
- Sanjay Kumar
假设每首歌曲都有一个唯一的标识符,最简单的方法是将最后播放的歌曲ID返回到第一个活动。 - Alberto Méndez
2个回答

1

有几种实现方法:

  • Handler 您可以在 A 中实现 Handler 并将 Handler 的地址传递给 B。然后,您可以使用此 Handler 向 A 发送消息。
  • BroadcastReceiver 与 Handler 相同。您可以在 A 中实现 BroadcastReceiver 并将其地址传递给 B。然后,您可以使用此广播向 B 发送广播。
  • startActivityForResult 您可以使用 startActivityForResult 启动活动 B。您需要在 A 中实现 onActivityResult 函数。当 B 完成时,您可以向 A 发送数据。您可以在 B 结束时向 A 发送最后一首歌曲的数据。

请问您能告诉我如何在这里使用 handler 吗?我是 Android 的新手。 - Shivendra Saxena
Handler m_handler = new Handler(Looper.getMainLooper()) { public void handleMessage(Message msg) { [你的代码] } };你可以将这个handler传递给Activity B,在B中,你可以使用sendMessage()来发送消息。如果你需要更多信息,我可以贴出另一个带有代码块的答案。 - lucasjensen

1
如果您是Android新手,创建Android组件之间通信渠道的最简单(也是最快)方法是使用类似于EventBus的总线。
您只需要创建一个包含信息的类,然后您的活动将订阅总线,并且它们将非常轻松地相互发送和接收这些对象。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接