【发布时间】:2015-10-13 05:54:46
【问题描述】:
在我的活动中,我从活动 A(在后堆栈 A->B 中)调用活动 B,而不是从 B(在后堆栈 A-> B-> C)中调用活动 C,以反映一些结果活动A,而不是如何在单击按钮时跳转到活动A,并携带活动C的一些结果以反映在活动A中(同时清除活动B,C的回栈)
【问题讨论】:
在我的活动中,我从活动 A(在后堆栈 A->B 中)调用活动 B,而不是从 B(在后堆栈 A-> B-> C)中调用活动 C,以反映一些结果活动A,而不是如何在单击按钮时跳转到活动A,并携带活动C的一些结果以反映在活动A中(同时清除活动B,C的回栈)
【问题讨论】:
选项 1:您可以链式调用 startActivityForResult() 并在 onActivityResult() 回调中“展开”链。
startActivityForResult() 启动Activity BstartActivityForResult() 启动Activity CsetResult(RESULT_OK) 然后finish()
onActivityResult() 中收到活动 C 的结果。处理结果(如果需要)。setResult(RESULT_OK) 然后finish()
onActivityResult() 接收到Activity B 的结果。处理结果。选项 2:再次启动 Activity A,但在 Intent 中添加标志。
Intent intent = new Intent(this, ActivityA.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
// add more data to Intent
startActivity(intent);
finish();
此意图将在 Activity A 的 onNewIntent() 方法中接收。
编辑
选项 3: 使用 LocalBroadcastManager 在本地发送广播(仅在您的进程内)。这需要在 Activity A 中动态注册一个BroadcastReceiver,然后从 Activity C 发送广播。您仍然需要使用上述两种技术之一返回到 Activity A 并清除堆栈;这只是改变了数据传输回 Activity A 的方式。
【讨论】: