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