从另一个活动调用startActivityForResult

时间:2015-08-17 23:27:07

标签: android android-intent

我有一个活动A调用startActivityForResult来启动活动B,通常用户可以单击活动A中的按钮来启动活动B以获得结果。

现在我需要从活动C打开活动B,当活动B返回时,它应该返回活动A.这可能吗?

我尝试使用intent从Activity C启动Activity A并调用A的startActivityForResult方法,但似乎无法获取Activity A的实例。

正常堆栈是A-> B但现在我希望它是C-> B,但是当B返回时,它将结果返回给A.

我在想是否有可能的方法来做C-> A-> B但是从用户那里隐藏A?

3 个答案:

答案 0 :(得分:2)

这是一个非常聪明的问题。我认为凯文的回答是正确的方法,尽管我想补充一下这个主题:

首先,我们需要了解Activity的启动模式。在android中有3种活动启动模式:

  1. 标准模式:这是默认模式,其中始终会创建新的Activity,以便与发送的每个Intent分开处理。

  2. 单一顶部模式:此模式与标准模式的作用几乎相同,唯一的区别在于,如果在顶部有一个类型相同的Activity实例在来电者任务中堆叠,新的Activity 将被创建(Intent将被发送到现有的Activity onNewIntent()方法)。

  3. 单一任务模式:此模式与standardsingleTop完全不同。 Activity singleTask launchMode launchMode只允许一个实例。

  4. 基本上,我们可以在AndroidManifest.xml内直接指定<activity android:name=".SingleTaskActivity" android:label="singleTask launchMode" android:launchMode="singleTask"> </activity> 作为属性:

    finish()


    至于你的问题,假设我们坚持使用标准laucnhMode ,我能想到实现你想要的唯一解决方法就是在每次调用{startActivity()之后调用ActivityA方法。 1}} 不是 ActivityC。例如,假设我在public void buttonClick(View view) { switch (((Button) view).getText().toString()) { case "A": startActivity(new Intent(getApplicationContext(), ActivityA.class)); break; case "B": startActivity(new Intent(getApplicationContext(), ActivityB.class)); finish(); break; case "C": startActivity(new Intent(getApplicationContext(), ActivityC.class)); finish(); break; } } 内:

    ActivityA

    这样,无论我在哪里“回”,我都会回到tab_an。 我知道这可能无法解决您的问题,但我希望它能为您提供更多思考方式。

    让我知道这对你有什么帮助,如果不是简单的评论,我会编辑我的帖子。

答案 1 :(得分:1)

所以你的筹码是A-C-B,你希望它只是A?这很简单,只要在收到B的结果时调用C finish()中的onActivityResult(...)即可。这可能是任何结果或某些特定结果。它可以将此结果返回给A。

您无法可靠地获取活动A的实例,因为当A在后台或后台时,无法保证有任何实例可以获取。它可能会被持续存在并被破坏。

答案 2 :(得分:0)

只需在开始结果

之前添加getActivity()
getActivity().startActivityForResult(intent, 1);