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
我创建了一个应用程序如下:
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