2025-05-23

就像activities一樣,fragments也有它們自己的生命周期。理解fragments的生命周期,可以使你在它們被銷毀的時候保存它們的實例,這樣在它們重新被創建的時候,就能恢復它們之前的狀態。下面的例子測試瞭fragments的不同狀態。

    1.創建一個Fragment的子類:Fragment1.java。

[java] package net.horsttnann.Fragments; 
 
import android.app.Activity; 
import android.app.Fragment; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
 
public class Fragment1 extends Fragment { 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
            Bundle savedInstanceState) { 
 
        Log.d("Fragment 1", "onCreateView"); 
 
        // —Inflate the layout for this fragment—  
        return inflater.inflate(R.layout.fragment1, container, false); 
    } 
 
    @Override 
    public void onAttach(Activity activity) { 
        super.onAttach(activity); 
        Log.d("Fragment 1", "onAttach"); 
    } 
 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        Log.d("Fragment 1", "onCreate"); 
    } 
 
    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
        super.onActivityCreated(savedInstanceState); 
        Log.d("Fragment 1", "onActivityCreated"); 
    } 
 
    @Override 
    public void onStart() { 
        super.onStart(); 
        Log.d("Fragment 1", "onStart"); 
    } 
 
    @Override 
    public void onResume() { 
        super.onResume(); 
        Log.d("Fragment 1", "onResume"); 
    } 
 
    @Override 
    public void onPause() { 
        super.onPause(); 
        Log.d("Fragment 1", "onPause"); 
    } 
 
    @Override 
    public void onStop() { 
        super.onStop(); 
        Log.d("Fragment 1", "onStop"); 
    } 
 
    @Override 
    public void onDestroyView() { 
        super.onDestroyView(); 
        Log.d("Fragment 1", "onDestroyView"); 
    } 
 
    @Override 
    public void onDestroy() { 
        super.onDestroy(); 
        Log.d("Fragment 1", "onDestroy"); 
    } 
 
    @Override 
    public void onDetach() { 
        super.onDetach(); 
        Log.d("Fragment 1", "onDetach"); 
    } 

package net.horsttnann.Fragments;

import android.app.Activity;
import android.app.Fragment;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class Fragment1 extends Fragment {
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {

        Log.d("Fragment 1", "onCreateView");

        // —Inflate the layout for this fragment—
        return inflater.inflate(R.layout.fragment1, container, false);
    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        Log.d("Fragment 1", "onAttach");
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d("Fragment 1", "onCreate");
    }

    @Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        Log.d("Fragment 1", "onActivityCreated");
    }

    @Override
    public void onStart() {
        super.onStart();
        Log.d("Fragment 1", "onStart");
    }

    @Override
    public void onResume() {
        super.onResume();
        Log.d("Fragment 1", "onResume");
    }

    @Override
    public void onPause() {
        super.onPause();
        Log.d("Fragment 1", "onPause");
    }

    @Override
    public void onStop() {
        super.onStop();
        Log.d("Fragment 1", "onStop");
    }

    @Override
    public void onDestroyView() {
        super.onDestroyView();
        Log.d("Fragment 1", "onDestroyView");
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        Log.d("Fragment 1", "onDestroy");
    }

    @Override
    public void onDetach() {
        super.onDetach();
        Log.d("Fragment 1", "onDetach");
    }
}    2.按Ctrl+F11,將模擬器轉換成“橫屏模式”。

    3.按F11調試。

    4.當應用被加載的時候,LogCat窗口中有如下顯示。

[plain] 03-27 12:23:32.255: D/Fragment 1(704): onAttach 
03-27 12:23:32.255: D/Fragment 1(704): onCreate 
03-27 12:23:32.255: D/Fragment 1(704): onCreateView 
03-27 12:23:32.274: D/Fragment 1(704): onActivityCreated 
03-27 12:23:32.274: D/Fragment 1(704): onStart 
03-27 12:23:32.286: D/Fragment 1(704): onResume 
03-27 12:23:32.255: D/Fragment 1(704): onAttach
03-27 12:23:32.255: D/Fragment 1(704): onCreate
03-27 12:23:32.255: D/Fragment 1(704): onCreateView
03-27 12:23:32.274: D/Fragment 1(704): onActivityCreated
03-27 12:23:32.274: D/Fragment 1(704): onStart
03-27 12:23:32.286: D/Fragment 1(704): onResume
    5.按Home鍵,LogCat窗口中有如下顯示。

[plain] 03-27 12:25:23.174: D/Fragment 1(704): onPause 
03-27 12:25:25.174: D/Fragment 1(704): onStop 
03-27 12:25:23.174: D/Fragment 1(704): onPause
03-27 12:25:25.174: D/Fragment 1(704): onStop
    6.按Home鍵不放,重新進入應用,LogCat窗口中有如下顯示。

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

[plain] 03-27 12:27:54.384: D/Fragment 1(704): onPause 
03-27 12:27:55.324: D/Fragment 1(704): onStop 
03-27 12:27:55.324: D/Fragment 1(704): onDestroyView 
03-27 12:27:55.324: D/Fragment 1(704): onDestroy 
03-27 12:27:55.324: D/Fragment 1(704): onDetach 
03-27 12:27:54.384: D/Fragment 1(704): onPause
03-27 12:27:55.324: D/Fragment 1(704): onStop
03-27 12:27:55.324: D/Fragment 1(704): onDestroyView
03-27 12:27:55.324: D/Fragment 1(704): onDestroy
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分離的時候,調用這個方法。
 

摘自   horsttnann的專欄
 

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *