我正在使用
从片段中开始新的活动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()
。
我得到类似0x40001
,0x20001
之类的东西,随机位置更高。文档没有说明这一点。有什么想法吗?
答案 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;