无历史记录和子活动结果

4
我有以下情况: 活动A -> 活动B(设置noHistory) -> 活动C 当C完成后,我需要将结果返回给A。这可行吗?
我唯一能想到的方法是保留B的历史记录,并通过它转发来自C的结果。然而,如果启动B并从后台恢复程序,则会显示B。我希望不要在栈中保留B。

当您想要向A传递数据时,为什么不从C开始呢?launchmode singleinstance可能是您的解决方案... - WarrenFaith
1
请纠正我如果我错了,但是FLAG_ACTIVITY_FORWARD_RESULT应该可以解决问题。 - Zelimir
@Zelimir - 搞定了。C 作为 B(偏好设置)的子屏幕,而 A 是需要根据 C 的结果进行刷新的主要活动。 - Kamen
很高兴听到这个消息。我应该将其添加为答案,以便我们结束这个故事吗? - Zelimir
2个回答

5

额外细节

在此输入图片描述

在活动A中:

Intent intent = new Intent(getActivity(), B.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
startActivityForResult(intent, REQUEST_CODE);

在活动 A 中:

public void onActivityResult(int requestCode, int resultCode, Intent data) {
   if (resultCode == Activity.RESULT_OK && requestCode == REQUEST_CODE) {
      // TODO
   }
}

在活动B中:

Intent intent = new Intent(getActivity(), C.class);
intent.addFlags(Intent.FLAG_ACTIVITY_FORWARD_RESULT);
startActivity(intent);

在活动C中:

Intent intent = new Intent();
// put something to intent
setResult(Activity.RESULT_OK, intent);
finish();

2

正如Kamen已确认的那样,在这种情况下应使用FLAG_ACTIVITY_FORWARD_RESULT。如教程所述:

如果设置并且此Intent用于从现有活动启动新活动,则现有活动的回复目标将传输到新活动。这样,新活动就可以调用setResult(int)并将该结果发送回原始活动的回复目标。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接