gpt4 book ai didi

android - 从另一个 Activity 调用 startActivityForResult

转载 作者:行者123 更新时间:2023-12-02 16:37:22 32 4
gpt4 key购买 nike

我有一个 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 启动模式:

  1. 标准模式:这是默认模式,将始终创建一个新的 Activity 来单独处理每个 Intent已发送。

  2. 单顶模式:此模式的行为与标准模式几乎相同,唯一的区别是是否已存在具有相同类型的 Activity 实例调用者任务的堆栈顶部,将不会创建新的Activity(将发送Intent通过 onNewIntent() 方法添加到现有的 Activity)。

  3. 单任务模式:此模式与standardsingleTop有很大不同。具有 singleTask launchModeActivity 只允许有一个实例。

基本上,我们可以直接将 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/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com