FragmentTabHost 中嵌套的 Fragment 不能 onActivityResult

Nested Fragment in FragmentTabHost can not onActivityResult

我创建了一个应用程序如下: Main activity 包含 FragmentTabHost,其中包含两个 ContainerFragments,其中分别包含两个 Fragments。

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

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

提前致谢!

补充: 这是一个奇怪的行为,第一个嵌套片段 Community Fragment's onActivityResult 每次都可以调用,但是第二个嵌套片段 User Fragment's 不能被调用。当 UserFragment 中的 startActivityForResult,但 CommunityFragment 中的 onActivityResult 被调用。

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

假设 UserFragment 是您的子片段(ContainerFragment 的子片段),onActivityResult 方法不会在您 return 从您的 activity 开始时执行 startActivityForResult.

是support library的bug,我前段时间也遇到过类似的情况,到现在还没修复。老实说,我现在不确定它是否已修复,您必须找出答案。

这里有一个描述如何处理的解决方案:

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

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

基本上,在子片段中执行 onActivityResult 方法的最简单方法是从 Activity 级别 getActivity().startActivityForResult() 或父片段 [=] 开始 activity 13=] 并手动通知属于调用 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