【问题标题】:Finishing only certain activities and sending data [closed]仅完成某些活动并发送数据[关闭]
【发布时间】:2020-12-07 09:49:31
【问题描述】:

我只想完成某些活动(3. 和 4.)并将数据发送到 2. 活动。我该怎么做?

【问题讨论】:

  • 如果你不能在移动到 4 之前完成 3 然后使用 startActivityFoResult 打开活动 3 和 4 并将数据传回 Activity 所以当你在 Activity 3 中获取数据时你完成它并以相同的方式将其传递回活动 2。

标签: java android android-activity activity-finish


【解决方案1】:

你有两个选择:

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();

这将导致Activity3Activity4 从任务堆栈中删除onNewIntent() 将在Activity2 的现有实例上调用。 Activity2 应该覆盖 onNewIntent() 并且可以从传递给 onNewIntent() 的参数中的“附加”中检索返回的数据。

【讨论】:

    【解决方案2】:

    有两种方法可以做到这一点。

    1. 在清单或意图标志中为活动 3 设置 noHistory="true" 而 发射。在这种情况下,当您从 4 应用程序将直接转到 2,因为 3 不在后堆栈中。

    2. 使用安卓启动模式。您可以将 Activity 1,2 和 4 放在一个堆栈上,然后 活动 3 在不同的堆栈上。

    浏览此页面以了解启动模式。

    https://developer.android.com/guide/components/activities/tasks-and-back-stack

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-04
      • 1970-01-01
      • 1970-01-01
      • 2021-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多