错误的requestCode从另一个Activity返回onActivityResult

时间:2014-12-01 09:14:40

标签: android onactivityresult start-activity

我有Activity调用另一个Activity,调用其他Activities。 我发送到最后Activity以获得结果,然后我将结果发回第Activity页。

流程类似于

A -> B -> C -> D -> C -> B -> A

AD的流程由startActivityForResult组成,DA的流程由onActivityResult组成。

DBrequestCode始终相同(我决定的那个),但是从BA它突然从我的activity B变为activity A值为随机值(在此特定情况下为196614)。

这是我用来从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(); } } }

这是我用来回拨{{1}}:

的代码
{{1}}

我搜索了很多,但我无法找到出错的地方......

2 个答案:

答案 0 :(得分:25)

只需替换

startActivityForResult(intent, Defines.FILTER_BY_CATALOGUE);

getActivity().startActivityForResult(intent, Defines.FILTER_BY_CATALOGUE);

它肯定会起作用。 :)

答案 1 :(得分:10)

请求代码不是随机的。使用v4支持库片段时,片段索引编码在请求代码的前16位中,而您的请求代码位于最后16位。片段索引稍后用于查找将结果传递给的正确片段。 Reference

例如,196614实际上是3<< 16 + 6其中3是片段索引加1和6是您的请求代码。

士气:不要混合活动/片段startActivityForResult()onActivityResult()。从活动启动时,处理活动中的结果。从片段开始时,处理片段中的结果。