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 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题