【问题标题】:How to handle onActivityResult?如何处理onActivityResult?
【发布时间】:2016-08-11 10:00:14
【问题描述】:

我正在阻止 onActivity 结果。

活动 A startActivityForResult() 到活动 B,出于某种商业原因,我正在删除活动 B 并移至活动 F。从活动 F 必须将 setResult() 发送到活动 A 同时我必须在移至活动时清除堆栈A.

如何处理这种情况?

【问题讨论】:

  • "如何处理这种情况?" - 重新设计您的应用程序以避免您正在做的事情。 startActivityForResult() 专为非常简单的场景而设计。您可以将活动 B 到活动 F 组合成一个活动。或者,您可以将startActivityForResult() 替换为startActivity(),让F 使用startActivity()FLAG_ACTIVITY_CLEAR_TASK 启动A(假设您希望A 成为任务根),然后为A 找到其他方法来找出“结果” "。

标签: android android-activity onactivityresult startactivityforresult


【解决方案1】:

我们可以使用Intent类的标志(我自己没试过)-Intent.FLAG_ACTIVITY_FORWARD_RESULT

在您的每个中间活动中调用finish() 之前,您必须先调用startActivity(intent)。将此标志传递给intent

showC.setFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);

在您的最后一项活动中,进行常规的setResult() 仪式。然后像往常一样尝试在您的第一个活动中获得结果。

【讨论】:

  • 这真的是实现这一目标的正确方法吗?
  • 如果我们可以做两三个活动,但同时也清除堆栈
  • 从技术上讲,我看不出这有什么问题。试试看。
  • 我试过这个,但我不能把它用于所有其他活动。
  • @Boopathi 因为,您需要finish() 每个活动,因此不能对startActivityForResult()onActivityResult() 和`setResult() 进行链式调用。我看不出它如何以任何其他方式工作。
【解决方案2】:

使用intent启动ActivityF并使用intent.putExtra将结果传递给ActivityA

Intent intent = new Intent(ActivityF.this, ActivityA.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra("RESULT", "result to ActivityA");
startActivity(intent);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-09
    • 2021-07-20
    • 2015-08-06
    • 2021-09-16
    • 2021-09-02
    • 1970-01-01
    相关资源
    最近更新 更多