Android進階編程筆記(六)Fragment的生命週期

來源:互聯網
上載者:User

標籤:

  在上一篇博文中對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     @Override12     public void onAttach(Activity activity) {13         super.onAttach(activity);14         System.out.println(TAG + ":onAttach()");15     }16     17     @Override18     public void onCreate(Bundle savedInstanceState) {19         super.onCreate(savedInstanceState);20         System.out.println(TAG + ":onCreate()");21         22     }23     //重寫改方法,傳回值View將作為Fragment顯示的組件24     @Override25     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     @Override34     public void onActivityCreated(Bundle savedInstanceState) {35         super.onActivityCreated(savedInstanceState);36         System.out.println(TAG + ":onActivityCreated()");37     }38     39     @Override40     public void onStart() {41         super.onStart();42         System.out.println(TAG + ":onStart()");43     }44     45     @Override46     public void onResume() {47         super.onResume();48         System.out.println(TAG + ":onResume()");49     }50     51     @Override52     public void onPause() {53         super.onPause();54         System.out.println(TAG + ":onPause()");55     }56     57     @Override58     public void onStop() {59         super.onStop();60         System.out.println(TAG + ":onStop()");61     }62     63     @Override64     public void onDestroyView() {65         super.onDestroyView();66         System.out.println(TAG + ":onDestroyView()");67     }68     69     @Override70     public void onDestroy() {71         super.onDestroy();72         System.out.println(TAG + ":onDestroy()");73     }74     75     @Override76     public void onDetach() {77         super.onDetach();78         System.out.println(TAG + ":onDetach()");79     }80     81 }

  下面我們來實驗一下並看日誌結果:

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

  

  2、息屏狀態下:

  

  3、重新點亮螢幕:

  

  4、退出:

  

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

Android進階編程筆記(六)Fragment的生命週期

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.