我有一个包含 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 A
的 onCreate(...)
方法中使用 getIntent()
即可有效获取内容结果'。如果 Intent
为 null
或不包含要持久保存的预期数据,那么这是“首次启动”场景,但如果数据存在,您将知道 Activity A
是由于其他 Activity
之一中的保存操作而启动的。
关于android - 返回任何 Activity 的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11253052/