【问题标题】:Wrong requestCode returned onActivityResult from another Activity从另一个 Activity 返回的错误 requestCode onActivityResult
【发布时间】:2015-01-29 06:15:02
【问题描述】:

我有一个Activity,它调用另一个Activity,它调用另一个Activities。 我发送到最后一个Activity得到结果,然后我将结果发送回拳头Activity

流程有点像

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

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

DB requestCode 总是相同的(我决定的那个),但是从BA 它突然从我的值变为随机值(在这种特殊情况下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 的意图

标签: android onactivityresult start-activity


【解决方案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 是框架插入的。
猜你喜欢
  • 1970-01-01
  • 2012-05-20
  • 1970-01-01
  • 2017-12-22
  • 1970-01-01
  • 2021-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多