onActivityResult中的requestCode错误

时间:2012-05-12 14:11:31

标签: android android-fragments onactivityresult

我正在使用

从片段中开始新的活动
startActivityForResult(intent, 1);

并希望在Fragment的父Activity中处理结果:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    Log.d(TAG, "onActivityResult, requestCode: " + requestCode + ", resultCode: " + resultCode);
    if (requestCode == 1) {
        // bla bla bla
    }
}

问题是我从未将requestCode发布到startActivityForResult()

我得到类似0x400010x20001之类的东西,随机位置更高。文档没有说明这一点。有什么想法吗?

6 个答案:

答案 0 :(得分:729)

您正在从startActivityForResult()致电Fragment。执行此操作时,拥有requestCode的{​​{1}}会更改Activity

如果您想在活动中获得正确的Fragment,请尝试以下操作:

变化:

resultCode

要:

startActivityForResult(intent, 1);

答案 1 :(得分:25)

请求代码没有错。使用v4支持库片段时,片段索引编码在请求代码的前16位中,而您的请求代码位于最后16位。片段索引稍后用于查找正确的片段以传递结果。

因此,对于从表单片段对象启动的活动,处理onActivityResult requestCode,如下所示:

originalRequestCode = changedRequestCode - (indexOfFragment << 16)
      6             =      196614        -       (3 << 16)

答案 2 :(得分:16)

<强>更容易:

int unmaskedRequestCode = requestCode & 0x0000ffff

检查低16位,只是取消屏蔽它进行逻辑AND,高16位归零

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    final int unmaskedRequestCode = requestCode & 0x0000ffff

    if(unmaskedRequestCode == ORIGINAL_REQUEST_CODE){
      //Do stuff

    }
}

答案 3 :(得分:6)

如果您提供常量,请将其公开,然后在startActivityResult

中使用

示例:

public static final int REQUEST_CODE =1;
getActivity().startActivityForresult(intent, REQUEST_CODE);

答案 4 :(得分:2)

您也可以定义
super.onActivityResult(requestCode, resultCode, data)
Activity中(如果您覆盖onActivityResult) 在此

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    switch (requestCode) {

        ...

        default:
            super.onActivityResult(requestCode, resultCode, data);
    }
}

并在startActivityForResult(intent, requestCode)

中拨打Fragment

答案 5 :(得分:0)

片段中的

if (requestCode == PLACE_PICKER_REQUEST) {
            if (resultCode == RESULT_OK) {    
     //what ever you want to do
            }
主要活动中的

import React, { Component } from 'react';
import './Scripts/getMainBg.js';
class Homepage extends Component {
render() { 
return (

    <homepage>
        <div className="recent">
            <h1>Recently Added/Updated</h1>
                <div className="image">IMAGE1</div>
           </div>
           <div className="popular">
            <h1>Popular Right Now</h1>
                <div className="image"></div>
            </div>
        <div className="picks">
            <h1>Our Picks</h1>
                <div className="image"></div>
                <div className="image"></div>
        </div>
    </homepage>
    );
  }
}

export default Homepage;