onActivityResult从未在我的嵌套片段中调用过

Guy*_*Guy 4 android android-fragments onactivityresult

我有很多嵌套片段.

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

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

startActivityForResult(Intent.createChooser(intent, "Title"), FILE_PICK);
Run Code Online (Sandbox Code Playgroud)

我没有onActivityResult在其他任何地方覆盖.我试图把它调用活动A和它得到了所谓的,但后来即使我叫超级,它永远不会来到片段D.也试过打电话onActivityResultMainFragment,它永远不会被任何所谓的存在.

Lui*_*rra 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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在您的父片段中,您必须执行相同的操作,但请记住使用getChildFragmentManager以获取片段的片段管理器

    List <Fragment> fragments = getChildFragmentManager().getFragments();
Run Code Online (Sandbox Code Playgroud)

  • 谢谢.我接受了这个答案,因为它是解决这个问题的"通用"解决方案.您只需在所有嵌套片段中调用onActivityResult即可.但是我想指出@Jagu(下面)也发布了一个非常好的解决方案,解决了单个片段的问题(正是我需要的). (2认同)