Android學習筆記(六)Fragment的生命周期


  在上一篇博文中對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生命周期的例子,重寫了以上十一個生命周期方法:

 1 @SuppressLint("NewApi")
 2 public class MyFragment extends Fragment {
 3     Button bnOk;
 4     TextView tvShow;
 5     private final String TAG = "MyFragment";
 6     
 7     public MyFragment(){
 8         System.out.println(TAG + ":MyFragment()");
 9     }
10     
11     @Override
12     public void onAttach(Activity activity) {
13         super.onAttach(activity);
14         System.out.println(TAG + ":onAttach()");
15     }
16     
17     @Override
18     public void onCreate(Bundle savedInstanceState) {
19         super.onCreate(savedInstanceState);
20         System.out.println(TAG + ":onCreate()");
21         
22     }
23     //重寫改方法,返回值View將作為Fragment顯示的組件
24     @Override
25     public View onCreateView(LayoutInflater inflater, ViewGroup container,
26             Bundle savedInstanceState) {
27         System.out.println(TAG + ":onCreateView()");
28         //加載fragment_main.xml布局文件
29         View rootView = inflater.inflate(R.layout.fragment_main, container, false);
30         return rootView;
31     }
32     
33     @Override
34     public void onActivityCreated(Bundle savedInstanceState) {
35         super.onActivityCreated(savedInstanceState);
36         System.out.println(TAG + ":onActivityCreated()");
37     }
38     
39     @Override
40     public void onStart() {
41         super.onStart();
42         System.out.println(TAG + ":onStart()");
43     }
44     
45     @Override
46     public void onResume() {
47         super.onResume();
48         System.out.println(TAG + ":onResume()");
49     }
50     
51     @Override
52     public void onPause() {
53         super.onPause();
54         System.out.println(TAG + ":onPause()");
55     }
56     
57     @Override
58     public void onStop() {
59         super.onStop();
60         System.out.println(TAG + ":onStop()");
61     }
62     
63     @Override
64     public void onDestroyView() {
65         super.onDestroyView();
66         System.out.println(TAG + ":onDestroyView()");
67     }
68     
69     @Override
70     public void onDestroy() {
71         super.onDestroy();
72         System.out.println(TAG + ":onDestroy()");
73     }
74     
75     @Override
76     public void onDetach() {
77         super.onDetach();
78         System.out.println(TAG + ":onDetach()");
79     }
80     
81 }

  下面我們來試驗一下並看日志結果:

  1、啟動Fragment日志如下(請忽略黃色日志):

  

  2、息屏狀態下:

  

  3、重新點亮屏幕:

  

  4、退出:

  

  其實還有更多的情況,着這里就不一一試驗了。這個例子雖然很簡單,但能很好的反映了Fragment生命周期中各方法的回調時機。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM