Fragment:( Fragment就相当于一个有生命周期的View,它的生命周期被所在的Activity的生命周期管理 )
生命周期回调说明:
onAttach(Activity)
当Fragment与Activity发生关联时调用。
onCreateView(LayoutInflater, ViewGroup,Bundle)
创建该Fragment的视图
onActivityCreated(Bundle)
当Activity的onCreate方法返回时调用
onDestoryView()
与onCreateView想对应,当该Fragment的视图被移除时调用
onDetach()
与onAttach相对应,当Fragment与Activity关联被取消时调用
Fragment Api:
Fragment常用的三个类:
android.app.Fragment 主要用于定义Fragment
android.app.FragmentManager 主要用于在Activity中操作Fragment
android.app.FragmentTransaction 保证一些列Fragment操作的原子性
主要的操作都是FragmentTransaction的方法:
1 // v4包中,getSupportFragmentManager 2 FragmentManager fm = getFragmentManager(); 3 // 开启一个事务 (主要的操作都是FragmentTransaction的方法) 4 FragmentTransaction transaction = fm.benginTransatcion(); 5 6 // 往Activity中添加一个Fragment 7 transaction.add(Fragment fragment); 8 // 从Activity中移除一个Fragment,如果被移除的Fragment没有添加到回退栈(回退栈后面会详细说),这个Fragment实例将会被销毁。 9 transaction.remove(Fragment fragment); 10 // 使用另一个Fragment替换当前的,实际上就是remove()然后add()的合体 11 transaction.replace(R.id.XXX, Fragment fragment); 12 // 隐藏当前的Fragment,仅仅是设为不可见,并不会销毁 13 transaction.hide(Fragment fragment); 14 // 显示之前隐藏的Fragment 15 transaction.show(Fragment fragment); 16 //提交一个事务 17 transatcion.commit();
// 会将view从UI中移除,和remove()不同,此时fragment的状态依然由FragmentManager维护。
detach()
// 重建view视图,附加到UI上并显示。
attach();
判断什么时候该使用什么方法:
(1)希望保留用户操作的面板,可以使用hide和show。
(2)不希望保留用户操作,可以使用remove(),然后add();或者直接使用replace(),效果相同。
(3)remove会销毁整个Fragment实例,而detach则只是销毁其视图结构,实例并不会被销毁。
(4)当前Activity一直存在,那么在不希望保留用户操作的时候,可以优先使用detach。
参考地址:Android Fragment 真正的完全解析(上) Android Fragment 真正的完全解析(下)
对于一些操作,Fragment发生的生命周期变化:
切换到该Fragment:onAttach() -> onCreate() -> onCreateView() -> onActivityCreated() -> onStart() -> onResume()
屏幕灭掉或者回到桌面(Home): onPause() -> onSaveInstanceState() -> onStop()
屏幕解锁或者重新回到应用: onStart() -> onResume()
切换到其他Fragment: onPause() -> onStop() -> onDestroyView()
切换回本身的Fragment: onCreateView() -> onActivityCreated() -> onStart() -> onResume()
退出应用:onPause() -> onStop() -> onDestroyView() -> onDestroy() -> onDetach()