我无法找到子活动更改父活动数据的最佳解决方案。
我有一个包含项目列表的活动A.活动A启动活动B以向用户显示详细信息。用户可以运行操作并创建活动C.活动C为活动A中的列表创建新元素。
数据保存在数据库中,因此传递数据没有问题。我只对通知感兴趣。
通知活动A的最佳解决方案是数据已被更改?
目前我知道有两种解决方案:
1)使用startActivityForResult(..)
和Extras
按活动B和C返回结果。结果将包含消息“datachanged” - > true / false 。
2)在恢复时始终刷新活动A中的数据。
3)将意图从活动C发送到活动A(广播)
我发现的解决方案几乎肯定是错误的:
4)保存在某个全球状态
5)使用getParent()来使用父活动
活动之间是否还有其他更轻量级的消息系统?活动服务沟通中的Handler
和Messanger
之类的东西。也许不应该有一个因为它违背设计?
答案 0 :(得分:2)
另一个选择是使用广播或localbroadcasts,以便将通知/事件从C发送到A.
它看起来像: 1.活动A加载onCreate中的数据。
活动A将广播接收器注册到某个自定义操作“com.mypackage.datachanged”。
活动C在更改数据后使用相同的操作发送广播意图。
这样 - 如果活动A仍保留在内存中 - 它的接收器将捕获该事件并在需要时重新加载列表。如果活动A被终止 - 它将在重新创建时自动刷新数据。
一些说明: 1.不要忘记在活动A的onDestroy中注销接收器。 2.您可以使用本地广播而不是广播。优点:更好的性能和安全性(您的意图永远不会离开您的应用程序)。
答案 1 :(得分:1)
使用startActivityForResult通过B和C发送消息是执行此操作的最佳方式。