You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Studio Java:子Activity返回的Intent在父Activity回退时未被接收

问题分析与解决办法

核心问题原因

Intent.FLAG_ACTIVITY_FORWARD_RESULT的作用是将当前Activity的跳转请求来源转发给下一个Activity,也就是说子Activity的返回结果会直接传给启动SetListMasterViewActivity的组件(即SetListEditAdapter所在上下文),而非SetListMasterViewActivity本身——这就是父ActivityonActivityResult完全不触发的根本原因。再加上FLAG_ACTIVITY_SINGLE_TOP让父Activity复用实例,进一步导致你无法在父Activity内直接接收子Activity的返回结果。


具体修复步骤

  1. 移除Intent.FLAG_ACTIVITY_FORWARD_RESULT标记
    启动子Activity时,直接用常规的startActivityForResult()(AndroidX环境建议用registerForActivityResult()),不要使用转发标记。示例代码:

    // 父Activity SetListMasterViewActivity中启动子Activity的代码
    Intent intent = new Intent(this, SetListOpenViewActivity.class);
    intent.putExtras(yourData);
    startActivityForResult(intent, REQUEST_CODE_SET_LIST_OPEN); // 自定义请求码常量
    

    AndroidX环境下的写法:

    // 父Activity中初始化Launcher
    ActivityResultLauncher<Intent> openSetListLauncher = registerForActivityResult(
        new ActivityResultContracts.StartActivityForResult(),
        result -> {
            if (result.getResultCode() == RESULT_OK && result.getData() != null) {
                Intent resultIntent = result.getData();
                // 在这里处理子Activity返回的数据
            }
        }
    );
    
    // 启动子Activity时调用
    Intent intent = new Intent(this, SetListOpenViewActivity.class);
    intent.putExtras(yourData);
    openSetListLauncher.launch(intent);
    
  2. 按需调整父Activity的启动标记
    如果业务不需要FLAG_ACTIVITY_SINGLE_TOP,可直接移除;若必须保留,需在父Activity的onNewIntent()中更新Intent并处理逻辑:

    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        setIntent(intent); // 更新为新Intent
        // 在这里处理新Intent携带的数据
    }
    

    注意:此步骤仅处理父Activity复用实例时的Intent更新,和接收子Activity返回结果是独立逻辑。

  3. 子Activity返回代码保持不变
    确保子Activity返回结果的代码正确:

    // 子Activity SetListOpenViewActivity中返回结果的代码
    Intent resultIntent = new Intent();
    resultIntent.putExtras(yourResultData);
    setResult(RESULT_OK, resultIntent);
    finish();
    

额外注意事项

  • 不要误用FLAG_ACTIVITY_FORWARD_RESULT:该标记仅适用于不需要当前Activity处理返回结果,需将结果直接传递给上上游组件的场景,显然你的场景不符合。
  • Android 11及以上版本,注意Activity启动模式和权限配置,避免其他限制导致结果无法传递。

内容的提问来源于stack exchange,提问作者kiteandwindsurfer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 20:12:45