FragmentTabHost中的嵌套片段不能onActivityResult

时间:2015-11-06 09:16:13

标签: android android-fragments android-tabhost fragment-tab-host

我创建了一个如下应用程序: 主要活动包括FragmentTabHost,其中包括两个ContainerFragments,其中包含两个片段。

现在我startActivityForResult来自UserFragment,但onActivityResult中的UserFragment无法调用!怎么了?如何解决?

https://github.com/VictorS-Zhao/TabHostAndNestedFragment中的项目。

提前致谢!

补充: 这是一种奇怪的行为,每次都可以调用第一个嵌套片段Community Fragment onActivityResult,但不能调用第二个嵌套片段User Fragment。来自startActivityForResult的{​​{1}},但UserFragment中的onActivityResult被调用。

解决方案: 最后我在onActivityResult() not called in new nested fragment API找到了解决方案 根据此答案,应覆盖CommunityFragment中的onActivityResult,并在ContainerFragment中使用getParentFragment().startActivityForResult。太好了!

1 个答案:

答案 0 :(得分:1)

如果UserFragment是您的子片段(ContainerFragment的子节点),则从您从已启动的活动返回后,onActivityResult方法不会执行 startActivityForResult

这是支持库中的一个错误,我前一段时间遇到过类似的情况,但仍然没有修复。老实说,我不确定目前是否已修复,你必须找出答案。

以下是描述如何处理该问题的解决方案:

http://inthecheesefactory.com/blog/how-to-fix-nested-fragment-onactivityresult-issue/en

https://gist.github.com/artem-zinnatullin/6916740

基本上,在子片段中执行onActivityResult方法的最简单方法是从Activity级别getActivity().startActivityForResult()或Parent Fragment getParentFragment().startActivityForResult()启动活动,并手动通知属于调用Activity的每个片段关于调用的Activity的结果

或者你可以使用一些开源:

https://github.com/nuuneoi/StatedFragment

希望有所帮助。

对补充的回应:

如上所述,BaseContainerFragments属于MainActivity,因为这些片段onActivityResult方法正常调用。

将子片段添加到父片段时,问题就开始了。对于子片段onActivityResult未被调用,您必须在Activity或ParentFragment中手动处理它。

见:

onActivityResult() not called in new nested fragment API

onActivityResult is not being called in Fragment