什么是Fragment:
Fragment称为碎片,必须依附于Activity存在,有自己的生命周期,可以动态的添加删除,为大屏幕提供灵活的UI设计支持。
Fragment为什么被称为第五大组件:
使用广泛,有自己的生命周期,比Activity更节省内存;
生命周期
onAttach()
onCreate()
onCreateView()
onActivityCreated()
onStart()
onResume()
onPause()
onStop()
onDestoryView()
onDestory()
onDetach()
// replace,FragmentA替换为FragmentB,在创建完B以后会先销毁A,再创建B的视图
FragmentB: onAttach
FragmentB: onCreate
——————————————————————————
FragmentA: onPause
FragmentA: onStop
FragmentA: onDestroyView
FragmentA: onDestroy
FragmentA: onDetach
——————————————————————————
FragmentB: onCreateView
FragmentB: onActivityCreated
FragmentB: onStart
FragmentB: onResume
// add,添加FragmentA
FragmentA: onAttach
FragmentA: onCreate
FragmentA: onCreateView
FragmentA: onActivityCreated
FragmentA: onStart
FragmentA: onResume
//remove,移除FragmentA
FragmentA: onPause
FragmentA: onStop
FragmentA: onDestroyView
FragmentA: onDestroy
FragmentA: onDetach
//attach,从detach到attach状态
FragmentA: onCreateView
FragmentA: onActivityCreated
FragmentA: onStart
FragmentA: onResume
//detach,从attach到detach状态
FragmentA: onPause
FragmentA: onStop
FragmentA: onDestroyView
hide和show不会触发生命周期回调
Fragment与Activity之间是如何传值的
一、Activity给fragment传值
1、setArguments(),传入Bundle对象,使用getArguments()获取
2、getFragmentManager.fingFragmentByTag()或findFragmentById获得fragment。在addFragment和replace是可将Tag传入,id为xml布局中占位控件FrameLyout的id。
二、Fragment向Activity传值:
1、通过回调的方式设置,activity实现接口
2、通过getActivity获取到activity。防止activity为空的情况可以在onAttach(Activity context)方法中保存一份Activity的实例,此方法已被标记过时,用onAttach(Context context)代替。
三、Fragment与Frament之间传值:
1、通过接口回调;
2、通过Activity获取到getSupportFragmentManager进而获取到fragment。
FragmentTransaction的add和replace的区别:
1、add将一个fragment添加到activity中,
2、replace将顶层的fragment替换掉
Fragment如何实现类似Activity的压栈和出栈效果的
addToBackStack(null)
FragmentManagerImpl中有一个用于存储BackStackRecord的ArrayList,来管理事务;
FragmentPagerAdapter与FragmentStatePagerAdapter的区别:
FragmentPageAdapter,在Fragment切换的时候之前的Fragment不会销毁,适用于Fragment较少的情况;
FragmentStatePageAdapter,在Fragment切换后会将前面的Fragment销毁,适用于Fragment较多的情况。