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 树莓派与pix飞控通信
  • ¥15 自动转发微信群信息到另外一个微信群
  • ¥15 outlook无法配置成功
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题