我开始从我的片段与新活动
startActivityForResult(intent, 1);
并且要处理的结果,在该片段中的父活动:
@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
等具有随机更高位设置。 该文档不说这事。 有任何想法吗?
您呼叫startActivityForResult()
从你的Fragment
。 当你这样做时, requestCode
通过改变Activity
拥有该Fragment
。
如果你想获得正确的resultCode
您的活动试试这个:
更改:
startActivityForResult(intent, 1);
至:
getActivity().startActivityForResult(intent, 1);
请求代码是没有错的。 当使用支持v4的文库片段,片段指数在请求码的高16位进行编码和您的请求代码是在低16位。 片段指数稍后用于找到正确的片段传递的结果。
因此,对于活动启动形式片段对象,处理onActivityResult requestCode象下面这样:
originalRequestCode = changedRequestCode - (indexOfFragment << 16)
6 = 196614 - (3 << 16)
更轻松:
int unmaskedRequestCode = requestCode & 0x0000ffff
检查低16位,只是揭露它做逻辑与高16位清零
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
final int unmaskedRequestCode = requestCode & 0x0000ffff
if(unmaskedRequestCode == ORIGINAL_REQUEST_CODE){
//Do stuff
}
}
如果您提供恒定的把它公开,然后在使用startActivityResult
例:
public static final int REQUEST_CODE =1;
getActivity().startActivityForresult(intent, REQUEST_CODE);
您也可以定义
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
在片段
getActivity().startActivityForResult(builder.build(getActivity()), PLACE_PICKER_REQUEST);
在主要活动:
if (requestCode == PLACE_PICKER_REQUEST) {
if (resultCode == RESULT_OK) {
//what ever you want to do
}