在我的示例中有三個類: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();
如果有人同樣碰到了這個問題,我希望我的方法能夠幫助你。