一些关于Fragment的基本概念
fragment翻译为碎片,是从Android3.0开始新增的概念,目的是为了适配平板。与Activity很相似,也有自己的生命周期,可以从运行中的activity中添加或移除,但是 一个fragment必须是嵌入在一个activity中,同时fragment的生命周期受activity的影响。
需要注意的是在使用fragment时,需要导入import android.support.v4.app.Fragment
而非import android.app.Fragment
,原因是向下兼容。
生命周期
先看一张官方的图片,除onReStart()方法外activity的生命周期方法都在fragment生命周期方法中。
- onAttach()
依附在activity上 - onCreateView()
加载一个布局 显示Fragment的内容 - onActivityCreated()
在这个onCreateView方法中初始化的view ,完全初始化 - onDestroyView()
在oncreateView方法里面初始化的view销毁了 - onDetach()
取消依附
而在日常开发中需要注意的是如下两个方法:
- onCreateView()
此方法必须返回一个显示的View,所以此方法必须重写 - onDestroy()
通常而言,如果需要做一些收尾的工作,可以在onDestroy()或者onDetach()方法中。但是由于activity中的习惯,所以很多开发者会选择在onDestroy()方法中,此处随意。
总结几点
1.onAttach() 和 onCreate() 只在 Fragment与Activity 第一次关联时调用
2.onDestroy() 和 onDetach() 只在 Fragment与Activity 销毁时才会被调用。
3.根据之前两点, addToBackStack()和add()、replace() 只涉及 onCreateView() 和 onDestroyView() 这之间的生命周期。
4.hide() 和 show()方法不涉及生命周期的改变
使用方法
// 得到FragmentManager
FragmentManager manager = getSupportFragmentManager();
// 得到FragmentTransacation
FragmentTransaction transaction = manager.beginTransaction();
- add(添加)
transaction.add(R.id.ll_main_container, fragment1);
- replace(替换)
transaction.replace(R.id.ll_main_container, fragment2);
- remove(移除)
transaction.remove(fragment3);
操作完成后一定要transaction.commit();