【发布时间】:2013-02-11 00:58:57
【问题描述】:
我有一个Fragment,它有一个FrameLayout。第一个片段 (A) 在其 Framelayout 中加载另一个片段 (B)。当我从内部片段 (B) 调用getParentFragment 时,我得到null。这种方法应该如何正确使用?
【问题讨论】:
标签: android android-fragments android-nested-fragment
我有一个Fragment,它有一个FrameLayout。第一个片段 (A) 在其 Framelayout 中加载另一个片段 (B)。当我从内部片段 (B) 调用getParentFragment 时,我得到null。这种方法应该如何正确使用?
【问题讨论】:
标签: android android-fragments android-nested-fragment
【讨论】:
在我的例子中,虽然我的 fragmentA 嵌套在 fragmentB 中,但是在 FragmentA 中调用 getParentFragment 后我仍然得到 null。最后我发现我应该在 FragmentB 中使用 getChildFragmentManager 而不是 getFragmentManager。
检查这个What is difference between getSupportFragmentManager() and getChildFragmentManager()?
【讨论】:
Fragment。仅当通过 getChildFragmentManager() 动态添加到 Fragment 时,才支持嵌套的 Fragments。帮助的一件事是,在创建适配器时使用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(), "");
【讨论】: