36

我有一个Fragment有一个FrameLayout。第一个片段 (A) 在其 Framelayout 中加载另一个片段 (B)。当我getParentFragment从内部片段(B)调用时,我得到null. 这种方法应该如何正确使用?

4

4 回答 4

54

getParentFragment() 是在 API 级别 17 (Android 4.2) 中引入的。Android 4.2 引入了嵌套片段(包含其他片段的片段)的思想。如果片段的父级是 Activity,则调用它会导致 null。

看看这个

如果您正在使用支持库,那么您可以使用 getParent(),可能在进行片段事务时需要使用 getChildFragmentManager()。看到这个

于 2013-02-11T01:08:06.817 回答
37

就我而言,虽然我的fragmentA嵌套在fragmentB中,但是在FragmentA中调用getParentFragment后我仍然得到null。最后我发现我应该在 FragmentB 中使用 getChildFragmentManager 而不是 getFragmentManager。

检查这个getSupportFragmentManager() 和 getChildFragmentManager() 有什么区别?

于 2013-09-29T10:54:40.733 回答
5

有帮助的一件事是,在创建适配器时使用getChildFragmentManager().

如果您不使用适配器,只需getChildFragmentManager()在进行事务时使用。

setTargetFragment()不推荐,因为它会给出moveState()片段错误(因为片段应该绑定到 FragmentManager)

于 2016-06-21T04:07:28.503 回答
4

我遇到了同样的问题,并通过在您的父片段中托管第二个片段来解决问题,getChildFragmentManager()然后您将不会获得空值......

父片段

  SignUpFragment signUpFragment = new SignUpFragment();
    getActivity().getSupportFragmentManager().beginTransaction().replace(R.id.contentPanel, signUpFragment)
            .addToBackStack(null).commit();

子片段:我使用的是一个对话框

 HospitalCardDialog hospitalCardDialog = new HospitalCardDialog();
    hospitalCardDialog.show(getChildFragmentManager(), "");
于 2016-12-05T09:44:25.180 回答