android - 从另一个 Activity 调用 startActivityForResult

标签 android android-intent

我有一个 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/

相关文章:

android - 如何在adobe Creative sdk中仅保留必需的选项

javascript - 创建供网站和移动设备使用的 API

Android - 广播 Intent 中的自定义操作

android - 如何使用自定义链接打开我的 Android 应用程序?

android - 使用 EXTRA_PLUGGED 获取 USB 电缆插入 IN/OUT 事件不起作用

android - 安装后 2 个 Activity 会产生 2 个图标

android - Firebase 规则解析错误

java - 从 SOAP 信封中检索类对象?

android - Flutter - 将 lib Flutter 添加到 Android 项目

android - 如何在用户离开当前 Activity 时执行一些代码(按下硬件按钮)