Dim*_*oid 291 android android-fragments onactivityresult
我正在从片段中开始一个新的活动
startActivityForResult(intent, 1);
Run Code Online (Sandbox Code Playgroud)
并希望在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
}
}
Run Code Online (Sandbox Code Playgroud)
问题是我从来没有得到requestCode我刚刚发布的内容startActivityForResult().
我有一个类似的东西0x40001,0x20001有一个随机的高位设置.文档没有说明这一点.有任何想法吗?
Cha*_*Yao 785
你在打电话startActivityForResult()给你Fragment.当你这样做时,requestCode由Activity拥有者改变Fragment.
如果您想resultCode在活动中获得正确的信息,请尝试以下方法:
更改:
startActivityForResult(intent, 1);
Run Code Online (Sandbox Code Playgroud)
至:
getActivity().startActivityForResult(intent, 1);
Run Code Online (Sandbox Code Playgroud)
Ash*_*rma 32
请求代码没有错.使用v4支持库片段时,片段索引编码在请求代码的前16位中,而您的请求代码位于最后16位.片段索引稍后用于查找正确的片段以传递结果.
因此对于活动启动表单片段对象,处理onActivityResult requestCode如下:
originalRequestCode = changedRequestCode - (indexOfFragment << 16)
6 = 196614 - (3 << 16)
Run Code Online (Sandbox Code Playgroud)
Jai*_*udo 17
更轻松:
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
}
}
Run Code Online (Sandbox Code Playgroud)
如果你提供不断的公开然后使用 startActivityResult
例:
public static final int REQUEST_CODE =1;
getActivity().startActivityForresult(intent, REQUEST_CODE);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
59297 次 |
| 最近记录: |