在我的示例中有三个类: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。我只是不知道有一个还起作用。
哎,在弄了几个小时和下载了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();
如果有人同样碰到了这个问题,我希望我的方法能够帮助你。