在我的示例中有 3 个类: A类,主要 Activity 。 A 类调用一个 startActivityForResult:
Intent intent = new Intent(this, ClassB.class);
startActivityForResult(intent, "STRING");
B类,这个类是一个TabActivity:
Intent intent = new Intent(this, ClassC.class);
tabHost.addTab...
C类,这个类是一个普通的Activity:
Intent intent = this.getIntent();
intent.putExtra("SOMETHING", "EXTRAS");
this.setResult(RESULT_OK, intent);
finish();
onActivityResult 在 A 类中被调用,但是 resultCode 是 RESULT_CANCELED
而不是 RESULT_OK
并且返回的 Intent 为 null。如何从 TabHost 内的 Activity 返回内容?
我意识到问题在于我的 C 类实际上是在 B 类内部运行的,而 B 类是将 RESULT_CANCELED
返回到 A 类的原因。我只是不知道工作还来得及。
最佳答案
哦,天哪!花了几个小时下载了安卓源码,终于找到了解决办法。
如果你查看 Activity 类,你会看到,finish()
方法只有在 mParent
属性设置为 时才会返回结果空
。否则结果丢失。
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();
如果有人再次寻找此问题的解决方法,我希望这会有所帮助。
关于android - 如何从 TabHost Activity 返回结果(startActivityForResult)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2497205/