Fragment复习
1. Fragment为什么被称为第五大组件
Fragment为什么被称为第五大组件
使用频率高,有自己的生命周期,同时可以灵活的加载到Activity中去。它是依赖于Activity的,不能单独存在。
Fragment的加载
- 静态加载
在xml布局中使用fragment标签加载进来,name指定对应的Fragment即可。
动态加载
// 获取Fragment管理器 FragmentManager fm = getFragmentManager(); //开启事务 FragmentTransaction transaction = fm.beginTransaction(); DemoFragment mDemoFragment = new DemoFragment(); //将Fragment加载到Activity中 transaction.replace(R.id.content_layout, mDemoFragment); //将该Fragment添加到回退栈中 transaction.addToBackStack("demoFragment"); //提交 transaction.commit();
- 静态加载
FragmentPagerAdapter和FragmentStatePagerAdapter的区别
Fragment和ViewPager结合使用的时候,可能会用到FragmentPagerAdapter和FragmentStatePagerAdapter
- FragmentPagerAdapter适用于页面较少的情况;FragmentStatePagerAdapter适用于页面较多的情况,因为它在切换页面时,进行了内存回收。
- 区别在于
destroyItem
方法,FragmentPagerAdapter
中只是将视图解绑mCurTransaction.detach((Fragment)object);
,并未从Adapter中移除。FragmentStatePagerAdapter
中进行了remove操作mCurTransaction.remove(fragment);
,可以被垃圾回收器直接回收。
2. Fragment的生命周期
Activity和Fragment的生命周期之前的关系
解释一下,比Activity多出来的几个生命周期方法:
- onAttach():和Activity关联时调用
- onCreateView():创建Fragment视图
- onActivityCreated():当Activity调用了onCreate时调用
- onDestoryView:Fragment视图被移除时调用
- onDetach:Fragment和Activity取消关联时调用。
3. Fragment之间的通信
和Activity通信:
在Fragment中通过getActivity()就可以操作Activity中相关的方法。
在Activity中调用Fragment中的方法
在Fragment中创建一个接口,让Activity实现该接口,进行接口回调执行。
Fragment和Fragment之间通信
在Fragment中获取Activity,然后通过Activity通过findFragmentById()获取另一个Fragment,即可进行通信。
4. Fragment管理器:FragmentManager
FragmentManager一般是用来操作Fragment的,但是直接操作Fragment的是FragmentTransaction而不是它自己。
FragmentTransaction的常用Api:
- replace:替换Fragment实例,是remove和add的结合
- add:将Fregment添加到对应的id布局中
- remove:将Fragment从Activity中移除
- addToBackStack:将Fragment添加到回退栈中