onActivityResult 从未在我的嵌套片段中调用
Posted
技术标签:
【中文标题】onActivityResult 从未在我的嵌套片段中调用【英文标题】:onActivityResult never called in my nested fragment 【发布时间】:2016-05-29 07:10:08 【问题描述】:我有很多嵌套的片段。
活动 A MainFragment(在 FrameLayout 中) 片段 A(在 MainFragment 的 FrameLayout 中) 片段 B(在 MainFragment 的 FrameLayout 中) 片段 C(在片段 B 的 ViewPager 中) Fragment D(在 Fragment B 中的 ViewPager 中)这是我为结果开始活动的方式:
startActivityForResult(Intent.createChooser(intent, "Title"), FILE_PICK);
我没有在其他任何地方覆盖 onActivityResult
。我尝试在 Activity A 中调用它,它被调用了,但是即使我调用了 super,它也从未到达 Fragment D。还尝试在MainFragment
中调用onActivityResult
,它也从未被调用。
【问题讨论】:
这应该可以帮助你:***.com/a/31012323/4252352 你可能会发现你必须调用getChildFragmentManager()
作为它的嵌套片段
blog.shamanland.com/2014/01/nested-fragments-for-result.html 不确定这是否仍然是最新的,或者已修复。不过我猜可能是这样。
【参考方案1】:
用于在 FragmentD 上调用 onActivityResult 覆盖父活动中的 onActivityResult,如:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
super.onActivityResult(requestCode, resultCode, data);
Fragment fragmentD = getSupportFragmentManager().findFragmentByTag("FRAGMENT_D_TAG");
if (fragmentD != null)
fragmentD.onActivityResult(requestCode, resultCode, data);
【讨论】:
【参考方案2】:该事件将在活动中接收。要在 Fragment D 中拥有它,您必须传播它。
在您的父活动上覆盖 onActivityResult
并开始调用您的片段的 onActivityResult
:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
super.onActivityResult(requestCode, resultCode, data);
List<Fragment> fragments = fragmentManager.getFragments();
if(fragments != null)
for(Fragment fragment : fragments)
fragment.onActivityResult(requestCode, resultCode, data);
在你的父片段中你必须做同样的事情,但记得使用getChildFragmentManager
来获取片段的片段管理器
List <Fragment> fragments = getChildFragmentManager().getFragments();
【讨论】:
谢谢。我接受了这个答案,因为它是这个问题的“通用”解决方案。您只需在所有嵌套片段中调用 onActivityResult。但是我想指出@Jagu(下)还发布了一个非常好的解决方案,它为单个片段解决了这个问题(正是我需要的)。以上是关于onActivityResult 从未在我的嵌套片段中调用的主要内容,如果未能解决你的问题,请参考以下文章
onActivityResult 从未从小部件启动的活动中调用
Facebook AccountKit 在主要活动上覆盖 onActivityResult
如何在 Pixel XL 的 OnActivityResult 中获取图像位图?