从另一个 Activity 返回的错误 requestCode onActivityResult
Posted
技术标签:
【中文标题】从另一个 Activity 返回的错误 requestCode onActivityResult【英文标题】:Wrong requestCode returned onActivityResult from another Activity 【发布时间】:2015-01-29 06:15:02 【问题描述】:我有一个Activity
,它调用另一个Activity
,它调用另一个Activities
。
我发送到最后一个Activity
得到结果,然后我将结果发送回拳头Activity
。
流程有点像
A -> B -> C -> D -> C -> B -> A
从A
到D
的流由startActivityForResult
组成,从D
到A
的流由onActivityResult
组成。
从D
到B
requestCode
总是相同的(我决定的那个),但是从B
到A
它突然从我的值变为随机值(在这种特殊情况下196614)。
这是我用来从activity A
调用activity B
的代码:
filterByCatalogue.setOnClickListener(new View.OnClickListener()
@Override
public void onClick(View v)
Intent intent = new Intent(getActivity(), CatalogueContainerActivity.class);
startActivityForResult(intent, Defines.FILTER_BY_CATALOGUE);
);
(将filterByCatalogue
用作FrameLayout
)
这是我用来回调activity A
的代码:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == Defines.FILTER_BY_CATALOGUE)
if (resultCode == RESULT_OK)
Intent intent = new Intent();
intent.putExtra("article", data.getStringExtra("article"));
setResult(RESULT_OK, intent);
finish();
我已经搜索了很多,但我找不到哪里出错了......
【问题讨论】:
请显示您的活动 A 代码,从哪里开始活动 B 的意图 【参考方案1】:请求代码不是随机的。使用 v4 支持库片段时,片段索引编码在请求代码的前 16 位中,您的请求代码在后 16 位中。片段索引稍后用于找到正确的片段来传递结果。 Reference.
例如,196614 实际上是 3
士气:不要混合活动/片段startActivityForResult()
和onActivityResult()
。从活动开始时,在活动中处理结果。从片段开始时,在片段中处理结果。
【讨论】:
@VladimirIvanov 接受的答案已于 2014 年 12 月 1 日即很久以前被接受。由于 Nitesh 的编辑和赏金(这没有授予任何人 - 可能他试图赏金他自己的答案)而弹出问题时,我才发布了我的答案。【参考方案2】:只需替换
startActivityForResult(intent, Defines.FILTER_BY_CATALOGUE);
与
getActivity().startActivityForResult(intent, Defines.FILTER_BY_CATALOGUE);
它肯定会起作用。 :)
【讨论】:
对我来说还不清楚为什么会这样。你能解释一下为什么这会解决问题吗? 该死的!我不知道为什么,但它有效!你能解释一下为什么吗? 我假设你是从一个片段开始这个意图..? 这里 getActivity() 返回当前活动的上下文而不是整个应用程序 @Luca 原因是来自Fragments
的请求代码在Activity.startActivityForResult()
实际发送之前已被修改,因此当Activity
收到结果时它会知道要发送哪个Fragment
它到。例如,你得到的值 196614 是 0x30006,其中 6 应该是原始请求代码,0x30000 是框架插入的。以上是关于从另一个 Activity 返回的错误 requestCode onActivityResult的主要内容,如果未能解决你的问题,请参考以下文章