您的位置:首页 > 移动开发 > Android开发

Android学习笔记(六)Fragment的生命周期

2015-09-07 18:47 555 查看
  在上一篇博文中对Fragment做了简单的介绍,现在再来探讨一下Fragment的生命周期。

一、Fragment的几种状态:  

  与Activity类似,Fragment也有一下几种状态:

  · 活动状态:当前Fragment位于前台,可见,可获得焦点。

  · 暂停状态:其他Activity位于前台,该Fragment可见,不可获得焦点。

  · 停止状态:不可见,失去焦点。

  · 销毁状态:该Fragment被完全删除或被结束。

二、Fragment的回调方法:

  在Fragment的生命周期中,有一下方法会被回调:

  · onAttach():当Fragment被添加到Activity时被回调,只回调一次。

  · onCreate(Bundle savedStatus):创建Fragment时被回调,一次。

  · onCreateView(): 每次创建、绘制该Fragment的View组件时回调,Fragment将会显示该方法返回的View组件。

  · onActivityCreated():Fragment所在的Activity启动完成后回调。

  · onStart():每次启动或恢复Fragment时被回调。

  · onResume():每次启动或恢复Fragment时被回调,onStart()回调后就会回调此方法。

  · onPause():暂停时回调。

  · onStop():停止Fragment时回调。

  · onDestroyView():销毁Fragment的View组件时回调。

  · onDestroy():销毁Fragment时调用,一次。

  · onDetach():将Fragment从Activity中删除、被替换完成时回到该方法,在onDestroy()之后回调。

  根据以上方法被回调的时机,我们可以根据需要选择性的覆盖指定方法。从而实现相关需求。

三、Fragment生命周期实例

  下面代码是Fragment生命周期的例子,重写了以上十一个生命周期方法:

@SuppressLint("NewApi")
public class MyFragment extends Fragment {
Button bnOk;
TextView tvShow;
private final String TAG = "MyFragment";

public MyFragment(){
System.out.println(TAG + ":MyFragment()");
}

@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
System.out.println(TAG + ":onAttach()");
}

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
System.out.println(TAG + ":onCreate()");

}
//重写改方法,返回值View将作为Fragment显示的组件
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
System.out.println(TAG + ":onCreateView()");
//加载fragment_main.xml布局文件
View rootView = inflater.inflate(R.layout.fragment_main, container, false);
return rootView;
}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
System.out.println(TAG + ":onActivityCreated()");
}

@Override
public void onStart() {
super.onStart();
System.out.println(TAG + ":onStart()");
}

@Override
public void onResume() {
super.onResume();
System.out.println(TAG + ":onResume()");
}

@Override
public void onPause() {
super.onPause();
System.out.println(TAG + ":onPause()");
}

@Override
public void onStop() {
super.onStop();
System.out.println(TAG + ":onStop()");
}

@Override
public void onDestroyView() {
super.onDestroyView();
System.out.println(TAG + ":onDestroyView()");
}

@Override
public void onDestroy() {
super.onDestroy();
System.out.println(TAG + ":onDestroy()");
}

@Override
public void onDetach() {
super.onDetach();
System.out.println(TAG + ":onDetach()");
}

}


  下面我们来试验一下并看日志结果:

  1、启动Fragment日志如下(请忽略黄色日志):

  


  2、息屏状态下:

  


  3、重新点亮屏幕:

  


  4、退出:

  


  其实还有更多的情况,着这里就不一一试验了。这个例子虽然很简单,但能很好的反映了Fragment生命周期中各方法的回调时机。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: