FragmentManager知识汇总
关于getChildFragmentManager()、 getFragmentManager()、getSupportFragmentManager()
知识储备:三个类
FragmentActivity
FragmentManager
FragmentTranscation
三者的关联:一个FragmentActivity可以包含多个Fragment,谁来管理? FragmentManager就起到了作用。做Fragment的增加、删除、替换的时候,事务FragmentTranslation 来负责执行。
getFragmentManager()和getSupportFragmentManager()的区别
android.app中获取管理类的方法就是getFragmentManager(),不常用了。
android的v4扩展包中的FragmentActivity中获取FragmentManager使用的就是getSupportFragmentManager(),可以兼容低版本,较为常用。
getFragmentManager() 属于Activity的方法
getSupportFragmentManager()属于FragmentActivity的方法
getChildFragmentManager()和getFragmentManager()的区别
它们两个属于两个不同的类,前者属于Fragment,后者属于Activity(上面有提到)。
需要管理相互独立的并且隶属于Activity的Fragment使用FragmentManager()。
Fragment中动态的添加Fragment要使用getChildFragmetManager()来管理,也就是说Framgnent中还嵌套了别的Fragment。
getChildFragmentManager() 属于Fragment
他们都意在获取FragmentManager对象,这个对象是做什么的?
顾名思义,这是个用来管理Fragment的对象。
FragmentManager对象通常是在其宿主环境中,在Activity(FragmentActivity)中采用getFragmentManager()(getSupportFragmentManager())方法来获取到。在Fragment中采用getChildFragmentManager()方法来获取到。
fragmentManager.png宿主环境类:通常指包含该Framgnet的主环境,也就是说FragmentManager的宿主环境类,可以是Activity,也可以是Fragment。
也就意味着,一个Fragment可以作为容器,包含其他的FragmentManager对象,用来管理Fragment中的一组Fragment。
FragmentManager对象的使用方法?
// 1.获取FragmentManager,在活动中可以直接通过调用getFragmentManager()方法得到
fragmentManager = getSupportFragmentManager();
// fragmentManager = getFragmentManager();
// 2.开启一个事务,通过调用beginTransaction()方法开启
transaction = fragmentManager.beginTransaction();
// 3.向容器内添加或替换碎片,一般使用replace()方法实现,需要传入容器的id和待添加的碎片实例
transaction.replace(R.id.testFragment, fragment); //fr_container不能为fragment布局,可使用线性布局相对布局等。
// 4.使用addToBackStack()方法,将事务添加到返回栈中,填入的是用于描述返回栈的一个名字
transaction.addToBackStack(null);
// 5.提交事物,调用commit()方法来完成
transaction.commit();</pre>
FragmentManager对象的初始化时机
FragmentManager必须初始化完成,才能管理Fragment。这里的初始化完成指的是通过构造器创建FragmentManager对象以后, 调用其attach()方法。
在Activity创建过程中,当回调到onCreate()方法之前FragmentManager对象已经完成初始化了。