baifaxiaoyao 2012-10-23 06:26 采纳率: 100%
浏览 3520
已采纳

如何从一个TabHost Activity中返回一个结果(startActivityForResult)

在我的示例中有三个类:Class A,主类。Class A调用一个startActivityForResult

Intent intent = new Intent(this, ClassB.class);
startActivityForResult(intent, "STRING");

Class B, 这个类是一个TabActivity:

Intent intent = new Intent(this, ClassC.class);
tabHost.addTab...

Class C, 这个类是一个正式的Activity:

Intent intent = this.getIntent();
intent.putExtra("SOMETHING", "EXTRAS");
this.setResult(RESULT_OK, intent);
finish();

onActivityResult在 Class A中被调用, 但是resultCode是RESULT_CANCELED而不是RESULT_OK 而且返回的intent是null。我怎么能从Activity返回,而不是从TabHost?
我知道这个问题是我的Class C实际上是代替了Class B运行的,而且Class B是返回RESULT_CANCELED到Class A。我只是不知道有一个还起作用。

  • 写回答

1条回答

  • niangzhi 2012-10-23 09:06
    关注

    哎,在弄了几个小时和下载了android资源后,我终于找到答案了。
    如果你仔细检查activity类,你可以发现如果有一个mParent属性设置的是null,finish()方法只是发了返回的结果,否则结果就会丢失

    public void finish() {
        if (mParent == null) {
            int resultCode;
            Intent resultData;
            synchronized (this) {
                resultCode = mResultCode;
                resultData = mResultData;
            }
            if (Config.LOGV) Log.v(TAG, "Finishing self: token=" + mToken);
            try {
                if (ActivityManagerNative.getDefault()
                    .finishActivity(mToken, resultCode, resultData)) {
                    mFinished = true;
                }
            } catch (RemoteException e) {
                // Empty
            }
        } else {
            mParent.finishFromChild(this);
        }
    }
    

    所以我的解决方案就是如果存在的话,就将结果发到父activity中,就像这样

    Intent data = new Intent();
     [...]
    if (getParent() == null) {
        setResult(Activity.RESULT_OK, data);
    } else {
        getParent().setResult(Activity.RESULT_OK, data);
    }
    finish();
    

    如果有人同样碰到了这个问题,我希望我的方法能够帮助你。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器