Android onActivityResult从未在嵌套片段中调用

Android onActivityResult从未在嵌套片段中调用,android,android-fragments,onactivityresult,Android,Android Fragments,Onactivityresult,我有很多嵌套片段 活动A MainFragment(在框架布局中) 片段A(在MainFragment中的FrameLayout中) 片段B(在MainFragment中的框架布局中) 片段C(在片段B中的ViewPager中) 片段D(在片段B中的ViewPager中)将在活动中接收事件。要使它在片段D中,你必须传播它 在父活动上覆盖onActivityResult并开始调用片段的onActivityResult: @Override protected void onActivity

我有很多嵌套片段

  • 活动A
    • MainFragment(在框架布局中)
      • 片段A(在MainFragment中的FrameLayout中)
      • 片段B(在MainFragment中的框架布局中)
        • 片段C(在片段B中的ViewPager中)

        • 片段D(在片段B中的ViewPager中)将在活动中接收事件。要使它在片段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);
                  }
              }
          }
          

          用于在父活动中的碎片覆盖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);
                  }
              }
          

          这应该能够帮助您:您可能会发现必须调用
          getChildFragmentManager()
          ,因为它的嵌套片段不确定这是否仍然是最新的,或者它是否已修复。不过我想可能是这样的。谢谢。我接受了这个答案,因为它是这个问题的“普遍”解决方案。您只需在所有嵌套片段中调用onActivityResult。然而,我想指出,@Jagu(下面)也发布了一个非常好的解决方案,它解决了单个片段的问题(这正是我所需要的)。
              List <Fragment> fragments = getChildFragmentManager().getFragments();
          
          @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);
                  }
              }