为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

守候你守候我 2019-07-10 09:58:28
如何从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班,我只是还不知道周围有什么工作。
查看完整描述

3 回答

?
森林海

TA贡献2011条经验 获得超2个赞

哦,上帝!在花了几个小时下载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();

我希望这将是有帮助的,如果有人寻找这个问题的解决办法。


查看完整回答
反对 回复 2019-07-10
?
慕雪6442864

TA贡献1812条经验 获得超5个赞

FLAG_ActivityForward结果?

如果设定并使用此意图从现有活动启动新活动,则现有活动的回复目标将转移到新活动。


查看完整回答
反对 回复 2019-07-10
  • 3 回答
  • 0 关注
  • 483 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信