猿问

如何从Tabhost活动返回结果(StartActivityForResult)?

如何从Tabhost活动返回结果(StartActivityForResult)?

我的例子中有三个类: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类,这个类是一个常规活动:

Intent intent = this.getIntent();intent.putExtra("SOMETHING", "EXTRAS");this.setResult(RESULT_OK, intent);finish();

在A类中调用onActivityResult,但结果代码是RESULT_CANCELED而不是RESULT_OK返回的意图为空。如何从Tabhost中的活动中返回某些内容?

我意识到问题是,我的C类实际上运行在B类内部,而B类是返回RESULT_CANCELED回到A班,我只是还不知道周围有什么工作。



守候你守候我
浏览 484回答 3
3回答

森林海

哦,上帝!在花了几个小时下载Android源代码之后,我终于找到了解决方案。如果你看一下活动类,你会发现,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();我希望这将是有帮助的,如果有人寻找这个问题的解决办法。

慕雪6442864

FLAG_ActivityForward结果?如果设定并使用此意图从现有活动启动新活动,则现有活动的回复目标将转移到新活动。
随时随地看视频慕课网APP

相关分类

Android
我要回答