Android getParentFragment返回null
我有一个Android getParentFragment返回null,android,android-fragments,android-nested-fragment,Android,Android Fragments,Android Nested Fragment,我有一个片段,它有一个框架布局。第一个片段(A)在其框架布局中加载另一个片段(B)。当我从内部片段(B)调用getParentFragment时,我得到null。如何正确使用此方法?getParentFragment()是在API级别17(Android 4.2)中引入的。安卓4.2引入了嵌套片段(包含其他片段的片段)的概念。如果片段具有作为活动的父级,则调用此函数将导致null 看一看 如果您使用的是支持库,则可以使用getParent(),可能在执行片段事务时需要使用getChildFrag
片段
,它有一个框架布局
。第一个片段(A)在其框架布局中加载另一个片段(B)。当我从内部片段(B)调用getParentFragment
时,我得到null
。如何正确使用此方法?getParentFragment()是在API级别17(Android 4.2)中引入的。安卓4.2引入了嵌套片段(包含其他片段的片段)的概念。如果片段具有作为活动的父级,则调用此函数将导致null
看一看
如果您使用的是支持库,则可以使用getParent(),可能在执行片段事务时需要使用getChildFragmentManager()。
在我的例子中,尽管我的fragmentA嵌套在fragmentB中,但是在fragmentA中调用getParentFragment后,我仍然得到null。最后我发现我应该在FragmentB中使用getChildFragmentManager而不是getFragmentManager
选中此项有帮助的一件事是,在创建适配器时使用
getChildFragmentManager()
如果您没有使用适配器,则在执行事务时只需使用getChildFragmentManager()
不建议使用
setTargetFragment()
,因为它在片段的moveState()
上给出了错误(因为片段应该绑定到FragmentManager)我遇到了同样的问题,并通过使用getChildFragmentManager()在父片段中托管第二个片段修复了问题
这样您就不会得到空值
父片段
SignUpFragment signUpFragment = new SignUpFragment();
getActivity().getSupportFragmentManager().beginTransaction().replace(R.id.contentPanel, signUpFragment)
.addToBackStack(null).commit();
子片段:我使用的是一个对话框
HospitalCardDialog hospitalCardDialog = new HospitalCardDialog();
hospitalCardDialog.show(getChildFragmentManager(), "");
非常感谢。我使用了setTargetFragment。我知道它不是为了这个目的,而是为了做这个工作。它是在4.2中引入的,但可以在早期版本中使用,使用支持库为什么findFragmentByTag在子片段(即嵌套)中不起作用?请注意,还有一个限制,即当布局包含标记时,不能将布局膨胀为
片段
。只有通过getChildFragmentManager()
动态添加到片段时,才支持嵌套的片段。