【问题标题】:onActivityResult never called in my nested fragmentonActivityResult 从未在我的嵌套片段中调用
【发布时间】: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,它也从未被调用。

【问题讨论】:

标签: android android-fragments onactivityresult


【解决方案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(下)还发布了一个非常好的解决方案,它为单个片段解决了这个问题(正是我需要的)。
    猜你喜欢
    • 1970-01-01
    • 2012-11-14
    • 2019-12-05
    • 2011-09-03
    相关资源
    最近更新 更多