android - 返回任何 Activity 的结果

标签 android android-intent

我有一个包含 4 个 Activity 的应用程序:A、X、Y 和 Z。

A是一种登陆Activity,它向用户显示数据库中的一堆信息。

X、Y 和 Z 是 A 启动的用于修改数据的 Activity 。这些 Activity 实际上并不查询数据库,而是将更改后的信息返回给 A,A 完成 onActivityResult 中的所有工作。流程始终是 A -> X 或 Y 或 Z -> A。这非常有效。

我想做的是让用户可以在 X、Y 和 Z 之间导航任意次数,直到单击保存按钮。这将修改流程,使得 A -> X -> Y -> Z -> A 成为可能。然而,数据只需要从单击“保存”的 Activity (在该示例中为 Z)中持久化。然后,A 将接收来自 Z 的结果,处理此更改,然后继续。如果用户以这种方式导航,那么无论 X 和 Y 发生什么,它们都已被丢弃。

我对此做了一些尝试。我最好的方法是在 X、Y 或 Z 启动另一个不是 A 的 Activity 后立即调用 finish() 。这允许用户在单击“保存”时返回到 A,这意味着它的导航方面是正确的,但发送的结果代码始终为 RESULT_CANCELED。我研究过使用 Intent 标志 FLAG_FORWARD_RESULT,但我没有使用它的经验,并且在与已启动结果的 Activity 一起使用时它会引发错误。我什至不确定这是否是值得探索的正确技术,因为从我读到的内容来看,只有在调用 Activity 和返回结果的 Activity 之间存在一个 Activity 时,才使用它。

这样的流程可能吗?基本上,我需要一个 Activity 来启动另一个 Activity 以获取结果,允许用户从第二个 Activity 执行任意数量的导航,然后在完成导航后将结果返回到原始 Activity。可以只修改代码,使 X、Y 和 Z 自行进行数据库访问,但如果可以的话我宁愿避免它。

最佳答案

However, the data only needs to be persisted from the Activity that clicks save,

在我看来,最简单的事情就是不在 Activity A 中使用 startActivityForResult(...) ,而只使用 startActivity(...) 后跟 finish() 以终止 Activity A

然后,当任何其他Activity单击“保存”按钮时,让它们为Activity A调用startActivity(...)并传递需要保存为 Intent extras 的数据。

然后,您只需在 Activity AonCreate(...) 方法中使用 getIntent() 即可有效获取内容结果'。如果 Intentnull 或不包含要持久保存的预期数据,那么这是“首次启动”场景,但如果数据存在,您将知道 Activity A 是由于其他 Activity 之一中的保存操作而启动的。

关于android - 返回任何 Activity 的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11253052/

相关文章:

android - 一些特殊字符没有出现在 Android 的文本字段中

android - 将 URL 与 Intent 匹配不起作用

android - Intent 项目 onClick to Activity

android - 通过 WhatsApp 按 Intent 发送消息

android - 用于创建 Activity 的 Intent 是否存在?

java - 通过 Android 应用程序将音频文件上传到 Parse.com 时遇到问题

android - 任务 ':app:compileDebugAidl' 执行失败。 > aidl 不见了

java - 改造 - Json 响应可以根据类型包含不同的字段

android - newChooseAccountIntent 返回一个名称,但 getToken 需要一个电子邮件

android - 如何检查Content Provider中是否有数据