getParentFragment返回null

Gon*_*alo 30 android android-fragments android-nested-fragment

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

Eur*_*nes 48

getParentFragment()是在API级别17(Android 4.2)中引入的.Android 4.2引入了嵌套片段(包含其他片段的片段)的想法.如果片段具有作为Activity的父级,则调用此结果为null.

看看这个.

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

  • 谢谢!我改用了setTargetFragment.我知道这不是为了这个目的,而是完成这项工作. (4认同)
  • 它是在4.2中引入的,但可以在早期版本中使用支持库 (2认同)

小智 33

在我的例子中,尽管我的fragmentA嵌套在fragmentB中,但是在FragmentA中调用getParentFragment之后我仍然得到null.最后我发现我应该在FragmentB中使用getChildFragmentManager而不是getFragmentManager.

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

  • 另请注意,[嵌套片段](http://developer.android.com/about/versions/android-4.2.html#NestedFragments)具有以下限制:当布局包含<时,您无法将布局扩展为"片段"片段>标签.只有在通过`getChildFragmentManager()`动态添加到`Fragment`时,才支持嵌套的`Fragments`. (2认同)

小智 7

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

如果您没有使用适配器,则只需getChildFragmentManager()在进行事务时使用即可。

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


Ame*_*een 5

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

父片段

  SignUpFragment signUpFragment = new SignUpFragment();
    getActivity().getSupportFragmentManager().beginTransaction().replace(R.id.contentPanel, signUpFragment)
            .addToBackStack(null).commit();
Run Code Online (Sandbox Code Playgroud)

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

 HospitalCardDialog hospitalCardDialog = new HospitalCardDialog();
    hospitalCardDialog.show(getChildFragmentManager(), "");
Run Code Online (Sandbox Code Playgroud)