onActivityResult从未在我的嵌套片段

时间:2016-02-17 14:14:10

标签: android android-fragments onactivityresult

我有很多嵌套片段。

  • 活动A.
    • MainFragment(在FrameLayout中)
      • 片段A(在MainFragment的FrameLayout中)
      • 片段B(在MainFragment的FrameLayout中)
        • 片段C(在片段B的ViewPager中)
        • 片段D(在片段B中的ViewPager中)< ---这是我想要捕捉到的活动

这是我开始结果活动的方式:

startActivityForResult(Intent.createChooser(intent, "Title"), FILE_PICK);

我没有onActivityResult覆盖其他任何地方。我试图在活动A中调用它并且它被调用,但是即使我打电话给超级,它也从未到达片段D.还尝试在onActivityResult中调用MainFragment并且它永远不会被调用

2 个答案:

答案 0 :(得分:11)

该活动将在活动中收到。要在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();

答案 1 :(得分:4)

在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);
        }
    }