Android 程式开发:(三)初识Fragment —— 3.3生命周期

来源:互联网 发布:算法入门经典第二版 编辑:程序博客网 时间:2024/05/15 22:58

 

   就像activities一样,fragments也有它们自己的生命周期。理解fragments的生命周期,可以使你在它们被销毁的时候保存它们的实例,这样在它们重新被创建的时候,就能恢复它们之前的状态。下面的例子测试了fragments的不同状态。

    1.创建一个Fragment的子类:Fragment1.java。

[java] view plaincopyprint?
  1. package net.horsttnann.Fragments;  
  2.   
  3. import android.app.Activity;  
  4. import android.app.Fragment;  
  5. import android.os.Bundle;  
  6. import android.util.Log;  
  7. import android.view.LayoutInflater;  
  8. import android.view.View;  
  9. import android.view.ViewGroup;  
  10.   
  11. public class Fragment1 extends Fragment {  
  12.     @Override  
  13.     public View onCreateView(LayoutInflater inflater, ViewGroup container,  
  14.             Bundle savedInstanceState) {  
  15.   
  16.         Log.d("Fragment 1""onCreateView");  
  17.   
  18.         // ---Inflate the layout for this fragment---  
  19.         return inflater.inflate(R.layout.fragment1, container, false);  
  20.     }  
  21.   
  22.     @Override  
  23.     public void onAttach(Activity activity) {  
  24.         super.onAttach(activity);  
  25.         Log.d("Fragment 1""onAttach");  
  26.     }  
  27.   
  28.     @Override  
  29.     public void onCreate(Bundle savedInstanceState) {  
  30.         super.onCreate(savedInstanceState);  
  31.         Log.d("Fragment 1""onCreate");  
  32.     }  
  33.   
  34.     @Override  
  35.     public void onActivityCreated(Bundle savedInstanceState) {  
  36.         super.onActivityCreated(savedInstanceState);  
  37.         Log.d("Fragment 1""onActivityCreated");  
  38.     }  
  39.   
  40.     @Override  
  41.     public void onStart() {  
  42.         super.onStart();  
  43.         Log.d("Fragment 1""onStart");  
  44.     }  
  45.   
  46.     @Override  
  47.     public void onResume() {  
  48.         super.onResume();  
  49.         Log.d("Fragment 1""onResume");  
  50.     }  
  51.   
  52.     @Override  
  53.     public void onPause() {  
  54.         super.onPause();  
  55.         Log.d("Fragment 1""onPause");  
  56.     }  
  57.   
  58.     @Override  
  59.     public void onStop() {  
  60.         super.onStop();  
  61.         Log.d("Fragment 1""onStop");  
  62.     }  
  63.   
  64.     @Override  
  65.     public void onDestroyView() {  
  66.         super.onDestroyView();  
  67.         Log.d("Fragment 1""onDestroyView");  
  68.     }  
  69.   
  70.     @Override  
  71.     public void onDestroy() {  
  72.         super.onDestroy();  
  73.         Log.d("Fragment 1""onDestroy");  
  74.     }  
  75.   
  76.     @Override  
  77.     public void onDetach() {  
  78.         super.onDetach();  
  79.         Log.d("Fragment 1""onDetach");  
  80.     }  
  81. }  
    2.按Ctrl+F11,将模拟器转换成“横屏模式”。

    3.按F11调试。

    4.当应用被加载的时候,LogCat窗口中有如下显示。

[plain] view plaincopyprint?
  1. 03-27 12:23:32.255: D/Fragment 1(704): onAttach  
  2. 03-27 12:23:32.255: D/Fragment 1(704): onCreate  
  3. 03-27 12:23:32.255: D/Fragment 1(704): onCreateView  
  4. 03-27 12:23:32.274: D/Fragment 1(704): onActivityCreated  
  5. 03-27 12:23:32.274: D/Fragment 1(704): onStart  
  6. 03-27 12:23:32.286: D/Fragment 1(704): onResume  
    5.按Home键,LogCat窗口中有如下显示。

[plain] view plaincopyprint?
  1. 03-27 12:25:23.174: D/Fragment 1(704): onPause  
  2. 03-27 12:25:25.174: D/Fragment 1(704): onStop  
    6.按Home键不放,重新进入应用,LogCat窗口中有如下显示。

[plain] view plaincopyprint?
  1. 03-27 12:26:21.505: D/Fragment 1(704): onStart  
  2. 03-27 12:26:21.505: D/Fragment 1(704): onResume  
    7.按返回键,LogCat窗口中有如下显示。

[plain] view plaincopyprint?
  1. 03-27 12:27:54.384: D/Fragment 1(704): onPause  
  2. 03-27 12:27:55.324: D/Fragment 1(704): onStop  
  3. 03-27 12:27:55.324: D/Fragment 1(704): onDestroyView  
  4. 03-27 12:27:55.324: D/Fragment 1(704): onDestroy  
  5. 03-27 12:27:55.324: D/Fragment 1(704): onDetach  

解析:

    1.当一个fragment被创建的时候,它会经历以下状态.。

  • onAttach()
  • onCreate()
  • onCreateView()
  • onActivityCreated()

    2.当这个fragment对用户可见的时候,它会经历以下状态。

  • onStart()
  • onResume()

    3.当这个fragment进入“后台模式”的时候,它会经历以下状态。

  • onPause()
  • onStop()

    4.当这个fragment被销毁了(或者持有它的activity被销毁了),它会经历以下状态。

  • onPause()
  • onStop()
  • onDestroyView()
  • onDetach()

    5.就像activitie一样,在以下的状态中,可以使用Bundle对象保存一个fragment的对象。

  • onCreate()
  • onCreateView()
  • onActivityCreated()

     6.fragments的大部分状态都和activitie很相似,但fragment有一些新的状态。

  • onAttached() —— 当fragment和activity关联之后,调用这个方法。
  • onCreateView() —— 创建fragment中的视图的时候,调用这个方法。
  • onActivityCreated() —— 当activity的onCreate()方法被返回之后,调用这个方法。
  • onDestroyView() —— 当fragment中的视图被移除的时候,调用这个方法。
  • onDetach() —— 当fragment和activity分离的时候,调用这个方法。

 

原创粉丝点击