【发布时间】:2014-02-13 17:20:54
【问题描述】:
请注意,此问题与以下问题不重复:
- https://stackoverflow.com/questions/19006776/onactivityresult-not-working-with-fragments
- onActivityResult not working on fragments
另外,之前有人问过另一个similar question,但没有提到方向变化(并且未解决)。
如果我不切换方向,Fragment 中的 onActivityResult 方法会被调用。但是,如果我按照这些步骤操作,它不会被调用:
- 在 FragmentActivity 中加载片段。
- 来自片段:
startActivityForResult(new Intent(MediaStore.ACTION_IMAGE_CAPTURE), Constants.REQ_CODE_IMAGE_CAPTURE); - 等待相机加载。
- 切换方向。
- 拍照并点击复选标记。
onActivityResult 仍然在父 FragmentActivity 中被调用。但是,由于这个警告,我得到:
W/FragmentActivity(4418): Activity result no fragment exists for index: 0x22d73
...我的猜测是父级由于方向变化而被破坏,并且在重新创建后,首先找不到调用startActivityForResult 的Fragment。
这是一个框架错误吗?如何解决这个问题?
编辑:应大众需求添加了更多代码。
FragmentActivity.java:
...
fragment = new ExampleFragment();
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace (R.id.mainContentView, fragment);
if (clearBackStack) {
// clear the back stack
while (getSupportFragmentManager().popBackStackImmediate ());
// add the current transaction to the back stack
transaction.addToBackStack (null);
}
else {
transaction.addToBackStack(null);
}
transaction.commit();
...
@Override
public void onActivityResult(int reqCode, int resultCode, Intent data) {
super.onActivityResult(reqCode, resultCode, data);
}
ExampleFragment.java:
Intent takePicture = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
startActivityForResult(takePicture, Constants.REQ_CODE_IMAGE_CAPTURE);
...
@Override
public void onActivityResult(int requestCode, int resultCode, Intent imageReturnedIntent) {
super.onActivityResult(requestCode, resultCode, imageReturnedIntent);
switch (requestCode) {
case Constants.REQ_CODE_IMAGE_CAPTURE:
// handle added image
}
}
【问题讨论】:
-
@shomeser,你的帖子是在搜索东西时出现的,但我没有嵌套片段,所以我认为它不相关。
-
您的片段索引太大:0x22d73,看起来发生了一些奇怪的事情。这个问题能否稳定重现?你能展示你的代码吗?
-
@shomeser,我的代码并没有什么特别之处,但请参阅编辑。如果您按照提供的步骤操作,问题总是可以重现的。
-
您是否尝试在 beginTransaction() 之前移动 popBackStackImmediate() 的调用??
标签: android android-fragments orientation-changes