与父活动通信,刷新父活动

时间:2014-02-21 13:54:49

标签: android android-intent android-activity

我无法找到子活动更改父活动数据的最佳解决方案。

我有一个包含项目列表的活动A.活动A启动活动B以向用户显示详细信息。用户可以运行操作并创建活动C.活动C为活动A中的列表创建新元素。

数据保存在数据库中,因此传递数据没有问题。我只对通知感兴趣。

通知活动A的最佳解决方案是数据已被更改?

目前我知道有两种解决方案:

1)使用startActivityForResult(..)Extras按活动B和C返回结果。结果将包含消息“datachanged” - > true / false

  • 我不喜欢这个,因为我无法直接发送消息

2)在恢复时始终刷新活动A中的数据。

  • 这不是浪费处理吗?

3)将意图从活动C发送到活动A(广播)

我发现的解决方案几乎肯定是错误的:

4)保存在某个全球状态

  • 没有全球状态(我是对的吗?)。我们不应该这样做,因为有一个额外的抽象层(意图)。

5)使用getParent()来使用父活动

  • 可以销毁父活动并在返回时重新创建

活动之间是否还有其他更轻量级的消息系统?活动服务沟通中的HandlerMessanger之类的东西。也许不应该有一个因为它违背设计?

2 个答案:

答案 0 :(得分:2)

另一个选择是使用广播或localbroadcasts,以便将通知/事件从C发送到A.

它看起来像: 1.活动A加载onCreate中的数据。

  1. 活动A将广播接收器注册到某个自定义操作“com.mypackage.datachanged”。

  2. 活动C在更改数据后使用相同的操作发送广播意图。

  3. 这样 - 如果活动A仍保留在内存中 - 它的接收器将捕获该事件并在需要时重新加载列表。如果活动A被终止 - 它将在重新创建时自动刷新数据。

    一些说明: 1.不要忘记在活动A的onDestroy中注销接收器。 2.您可以使用本地广播而不是广播。优点:更好的性能和安全性(您的意图永远不会离开您的应用程序)。

答案 1 :(得分:1)

使用startActivityForResult通过B和C发送消息是执行此操作的最佳方式。