Android开发中,Fragment嵌套Fragments遇到的问题
Fragment,简称碎片,是Android 3.0(API11)提出的,为了兼容低版本,support-v4库中也开发了一套Fragment API,最低兼容Android 1.6。
- Fragment是依赖于Activity的,不能独立存在的。
- 一个Activity里可以有多个Fragment。
- 一个Fragment可以被多个Activity重用。
- Fragment有自己的生命周期,并能接收输入事件。
- 我们能在Activity运行时动态地添加或删除Fragment。
工作过程中,Fragment
的使用也大大提高了我们的效率,通过Activity
嵌套多个Fragment
可以很容易的实现大多数app主界面的搭建。通常的做法都是通过getSupportFragmentManager()
来获取Fragment的管理者对象FragmentManager
来进行Fragment的添加和移除的一些操作。
但有时候也会有一些特殊的需求,比如上图中所示:主界面由Activity
嵌套Fragment
搭建,在子Fragment
中又嵌套了两个子Fragment
。这就需要我们做一些特殊的处理了。当然你可以使用getSupportFragmentManager()
来继续管理子Fragment
里的Fragment
碎片,但是会出现页面冲突的现象,这种是显然不允许的。这时候就要引入getChildFragmentManager()
对象了,顾名思义就是子级管理者对象。使用getChildFragmentManager()
来管理Fragment
才能达到我们想要的效果。这是因为第一级的Fragment嵌套在宿主Activity
,getFragmentManager()
返回的是Activity
的管理者对象,在Fragment中再嵌套Fragment
,getFragmentManager()
返回的是把自己加进来的管理者对象,也就是Activity
的管理者对象,这显然是不对的。它需要的是本级的管理者对象,这就需要使用getChildFragmentManager()
来进行管理了。
希望可以帮到你们。