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

我的嵌套子查询和 substr 函数有啥问题

如何在 Pixel XL 的 OnActivityResult 中获取图像位图?

片段 onActivityResult 方法执行调用活动 onActivityResult

登录onActivityResult Android后Facebook SDK应用程序崩溃