我有一个 Activity A,它调用 startActivityForResult 来启动 Activity B,通常用户可以单击 Activity A 中的按钮来启动 Activity B 以获取结果。
现在我需要从 Activity C 打开 Activity B,当 Activity B 返回时,它应该返回到 Activity A。这可能吗?
我尝试使用 Intent 从 Activity C 启动 Activity A 并调用 A 的 startActivityForResult 方法,但似乎无法获取 Activity A 的实例。
正常的堆栈是A->B,但现在我希望它是C->B,但是当B返回时,它返回结果给A。
我在想是否有一种可能的方法可以执行 C->A->B 但对用户隐藏 A?
最佳答案
这是一个非常聪明的问题。我认为凯文的回答是正确的方法,尽管我确实想补充一下这个主题:
首先我们需要了解Activity的启动模式。 Android 中有 3 种 Activity 启动模式:
标准模式:这是默认模式,将始终创建一个新的
Activity
来单独处理每个Intent
已发送。单顶模式:此模式的行为与标准模式几乎相同,唯一的区别是是否已存在具有相同类型的
Activity
实例调用者任务的堆栈顶部,将不会创建新的Activity
(将发送Intent
通过onNewIntent()
方法添加到现有的Activity
)。单任务模式:此模式与
standard
和singleTop
有很大不同。具有singleTask launchMode
的Activity
只允许有一个实例。
基本上,我们可以直接将 launchMode
指定为 AndroidManifest.xml
内的属性:
<activity
android:name=".SingleTaskActivity"
android:label="singleTask launchMode"
android:launchMode="singleTask">
</activity>
至于你的问题,假设我们坚持使用 Standard laucnhMode,我能想到的实现你想要的效果的唯一解决方法是在之后调用 finish()
方法每次调用 startActivity()
这不是 ActivityA
。例如,假设我在 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
。
我知道这可能无法解决您的问题,但我希望它确实能给您留下更多的思考方式。
请告诉我这是否对您有任何帮助,如果不是简单地发表评论,我将编辑我的帖子。
关于android - 从另一个 Activity 调用 startActivityForResult,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32061288/