我创建了一个如下应用程序:
主要活动包括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
。太好了!
答案 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中手动处理它。
见: