【发布时间】:2020-12-07 09:49:31
【问题描述】:
【问题讨论】:
-
如果你不能在移动到 4 之前完成 3 然后使用
startActivityFoResult打开活动 3 和 4 并将数据传回Activity所以当你在Activity3 中获取数据时你完成它并以相同的方式将其传递回活动 2。
标签: java android android-activity activity-finish
【问题讨论】:
startActivityFoResult 打开活动 3 和 4 并将数据传回 Activity 所以当你在 Activity 3 中获取数据时你完成它并以相同的方式将其传递回活动 2。
标签: java android android-activity activity-finish
你有两个选择:
1.使用startActivityForResult()
在这种情况下,Activity2 应该使用startActivityForResult() 启动Activity3。结果将在对onActivityResult() 的调用中返回给Activity2。
当Activity3 启动Activity4 时,它应该使用startActivity() 并且应该在Intent 中设置Intent.FLAG_ACTIVITY_FORWARD_RESULT 并调用finish()。
当Activity4准备好返回数据时,它应该用数据调用setResult(),然后调用finish()。这会将结果返回给Activity2。
2。使用FLAG_ACTIVITY_CLEAR_TOP | FLAG_ACTIVITY_SINGLE_TOP
在这种情况下,Activity2 应该使用 startActivity() 启动 Activity3。
Activity3 应该使用startActivity() 启动Activity4。
当Activity4 准备好返回数据时,它应该创建一个包含数据(作为“附加”)的Intent,然后执行以下操作:
Intent intent = new Intent(this, Activity2.class);
intent.addFlag(Intent.FLAG_ACTIVITY_CLEAR_TOP |
Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);
finish();
这将导致Activity3 和Activity4 从任务堆栈中删除onNewIntent() 将在Activity2 的现有实例上调用。 Activity2 应该覆盖 onNewIntent() 并且可以从传递给 onNewIntent() 的参数中的“附加”中检索返回的数据。
【讨论】:
有两种方法可以做到这一点。
在清单或意图标志中为活动 3 设置 noHistory="true" 而
发射。在这种情况下,当您从
4 应用程序将直接转到 2,因为 3 不在后堆栈中。
使用安卓启动模式。您可以将 Activity 1,2 和 4 放在一个堆栈上,然后 活动 3 在不同的堆栈上。
浏览此页面以了解启动模式。
https://developer.android.com/guide/components/activities/tasks-and-back-stack
【讨论】: