我的示例中有 3 个类:
A 类,主要活动。 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();
A类中调用了onActivityResult,但resultCode为RESULT_CANCELED
代替RESULT_OK
并且返回的意图为空。如何从 TabHost 内的 Activity 返回某些内容?
我意识到问题是我的 C 类实际上在 B 类内部运行,而 B 类返回的是RESULT_CANCELED
回到 A 类。我只是还不知道解决方法。
天啊!经过几个小时的下载 Android 源代码后,我终于找到了解决方案。
如果你看一下 Activity 类,你会发现,finish()
方法仅在存在时返回结果mParent
属性设置为null
。否则结果就会丢失。
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);
}
}
所以我的解决方案是将结果设置为父活动(如果存在),如下所示:
Intent data = new Intent();
[...]
if (getParent() == null) {
setResult(Activity.RESULT_OK, data);
} else {
getParent().setResult(Activity.RESULT_OK, data);
}
finish();
如果有人再次寻找此问题的解决方法,我希望这会有所帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)