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

主Activity使用Fragment时onActivityResult未触发的问题解决

问题原因及解决方案

核心问题

你没有使用带返回结果的启动Activity方法,而是用了普通的startActivity(),这导致系统不会触发onActivityResult()回调。另外,从Fragment中启动时直接调用Context的方法,也可能导致结果传递异常。

具体修复步骤

  1. 修改FragmentAdapter中启动Activity的代码
    将原来的startActivity(intent)替换为startActivityForResult(intent, 0)(这里的0要和主Activity中requestCode的判断值一致):

    @Override
    public void onClick(View v) {
        Intent intent = new Intent(v.getContext(), VoteOnPollActivity.class);
        intent.putExtra("pollGuid", fi.guid);
        // 替换为带请求码的启动方法
        ((Fragment)this).startActivityForResult(intent, 0);
    }
    

    注意:如果Adapter依附于Fragment,要确保调用的是Fragment的startActivityForResult方法,而非直接用Context的。如果是Fragment内部的点击事件,直接用getActivity().startActivityForResult(...)或者startActivityForResult(...)均可。

  2. 确认主Activity的onActivityResult逻辑
    你的主Activity代码已正确重写onActivityResult且调用了super.onActivityResult(),这部分没问题。可添加日志确认是否收到回调:

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        Log.d("MainActivity", "收到结果:requestCode=" + requestCode + ", resultCode=" + resultCode);
        if (requestCode == 0) {
            if(resultCode == this.RESULT_OK){
                String result=data.getStringExtra("guid");
                followFragment.deletePoll(result);
            }
        }
    }
    
  3. AndroidX项目推荐方案
    如果使用AndroidX,建议用ActivityResultLauncher替代旧的startActivityForResult,避免生命周期问题:

    // 在Fragment中初始化
    private ActivityResultLauncher<Intent> voteLauncher = registerForActivityResult(
        new ActivityResultContracts.StartActivityForResult(),
        result -> {
            if (result.getResultCode() == Activity.RESULT_OK) {
                Intent data = result.getData();
                if (data != null) {
                    String guid = data.getStringExtra("guid");
                    // 通知主Activity处理,或直接在Fragment中处理
                    ((MainActivity)getActivity()).handlePollResult(guid);
                }
            }
        }
    );
    
    // 启动Activity时调用
    @Override
    public void onClick(View v) {
        Intent intent = new Intent(v.getContext(), VoteOnPollActivity.class);
        intent.putExtra("pollGuid", fi.guid);
        voteLauncher.launch(intent);
    }
    

    这种方式无需重写onActivityResult,更符合现代Android开发规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 22:43:25