从官网中扣的图上可以看到Fragment的生命周期可以分成4段
1 创建阶段:onAttach(),onCreate(),onCreateView(),onActivityView();
此4个方法为创建阶段的方法,
Attach()可以获取到宿主的Activity对象,并可以给Fragment设置数据,
onCreate()这个是Fragment创建的方法,基本上不能做数据的操作。
onCreateView中用于view的绑定,这个时候可以做一些子控件获取的操作。
onActivityCreated()方法后才可以进行数据的操作。一般数据和事件的操作我都在此方法中执行。
2 Start阶段:onStart(),onResume();
为什么将这2个方法归为一类呢,因为基本上onStart()执行以后基本上onResume()也会执行,之前Activity中的onRestart()也可以理解为Fragment中onStart()。
3 Paused阶段:onPause(),onStop()。
这个阶段和Activity中的完全一样,一般为当前Fragment退出前天的时候执行此阶段,如果继续返回到前台直接调用start阶段中的2个方法。
4 销毁阶段:onDestroyView(),onDestroy(),onDetach()。
onDestroyView(),是Fragment中的ui与Fragment分离(通过inflate进来的ui),
onDestroy(),Fragment不再使用的时候调用,但是Activity中仍然可以找到当前的Fragment
onDetach(),当Fragment被回收的时候调用此方法。
在弄清楚Fragment生命周期后直接抽取项目开发中的baseFragment,用于简化生命周期
/**
* Fragment基类常规抽取:处理了Fragment的生命周期,子类在使用的时候不需要考虑生命周期
*
* @author YeShunDa
* @date 2016/11/2
*/
public abstract class BaseFragment extends Fragment {
/**
* 获取Fragment绑定的布局文件:此方法必须要复写
*
* @return 获取到当前Fragment对应的布局文件
*/
protected abstract int getResourcesLayoutId();
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
int resourcesLayoutId = getResourcesLayoutId();
if (resourcesLayoutId == 0) {
throw new RuntimeException("布局文件不能为空");
}
View view = inflater.inflate(resourcesLayoutId, null);
initView(view);
return view;
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
initData();
setViewData();
initEvent();
}
/**
* 初始化view:用于获取到当前布局中的控件
*
* @param view Fragment中的view对象
*/
protected void initView(View view) {
}
/**
* 给控件设置数据:子类可以选择性复写
*/
private void setViewData() {
}
/**
* 初始化事件:子类可以选择性复写
*/
private void initEvent() {
}
/**
* 初始化数据:子类可以选择性复写
*/
private void initData() {
}
}