Fragment的主要功能就是創建一個View,並且有一個生命周期來管理這個View的創建和銷毀。Fragment的生命周期與Activity的生命周期類似,都會有一些回調方法,你所做的工作就是利用好這些生命周期方法,在恰當的方法中做恰當的工作。
Fragment的生命周期與Activity的狀態圖如下:
左側是Activity的生命周期狀態,右側對應的是這個狀態下回執行Fragment的哪些生命周期方法。可以看到Fragment生命周期函數與Activity生命周期函數很多名字都是一樣的,對應的功能也類似,只不過在Created狀態和Destroyed狀態比Activity增加了一些方法。下面就說一下這幾個增加的生命周期方法:
與Activity類似,Fragment可以停留(長時間存在)的三個狀態:
與Activity類似,你可以利用Bundle來記錄Fragment的狀態,當Activity被銷毀需要記錄Fragment狀態,並且在Activity重新創建的時候恢復Fragment的狀態。你可以保存Fragment的狀態在Fragment的onSaveInstanceState()回調方法中,在onCteat()、onCreatView()或者onActivityCreated()方法中進行恢復。
在生命周期中Activity與Fragment的最大不同之處是回退棧是相互獨立的,Activity的回退棧是系統來管理的,Fragment的回退棧是被宿主Activity來管理的,也就是說你可以來進行控制(調用addToBackStack()).
注意:在Fragment中你如果要獲取一個Context對象,你可以調用getActivity()方法,但是調用getActivity()方法必須要在Fragment於Activity關聯起來之後,否則getActivity()返回為null。
上面說的都是Fragment的一些生命周期相關知識,下面來看看如何創建Fragment並且添加一個View給Fragment。
要想給Fragment添加一個View,你就必須重寫onCreateView方法,在這個方法中創建一個View並且返回,這個View是Fragment的根View。在這個方法中系統給你提供了LayoutInflater對象,通過這個對象你可以從xml文件中創建一個View,代碼如下:
publicstaticclassExampleFragmentextendsFragment{ @Override publicView onCreateView(LayoutInflaterinflater,ViewGroupcontainer, BundlesavedInstanceState){ // Inflate the layout for this fragment returninflater.inflate(R.layout.example_fragment,container,false); } }
在onCreatView方法中container參數是一個ViewGroup,這個ViewGroup是從Activity傳遞過來的,是Fragment的View將要嵌入的那個父View。這裡需要注意一下LayoutInflater的inflate函數,在這裡第三個參數是false。
在這解釋一下inflate的三個參數含義:
resource:是所要解析的layout文件ID;
root:一個ViewGroup,attachToRoot為true時會作為從xml文件解析出來的view的根View,如果attachToRoot為false時僅僅提供一些布局的參數給返回的rootView;
attachToRoot:決定解析的view是否會綁定到root參數提供的view上。
以上就是Fragment的生命周期和如何創建一個Fragment的View。
關注微信公眾號:程式設計師互動聯盟(coder_online)
更有(java/C/C++/Linux/Android)高手幫你解決難題,和你互動,討論編程未來。
長按二維碼識別關注程式設計師互動聯盟
關注後和技術大牛做朋友,還不趕快來!
聲明:本文使用的圖片部分來自網絡