android Fragments詳解六:處理fragement的生命週期

把條目添加到動做欄

你的fragment們能夠向activity的菜單(按Manu鍵時出現的東西)添加項,同時也可向動做欄(界面中頂部的那個區域)添加條目,這都需經過實現方法onCreateOptionManu()來完成。 html

你從fragment添加到菜單的任何條目,都會出如今現有菜單項以後。Fragment以後能夠經過方法onOptionsItemSelected()來響應本身的菜單項被選擇的事件。 android

你也能夠在fragemnt中註冊一個view來提供快捷菜單(上下文菜單)。當用戶要打開快捷菜單時,fragmentonCreateContextMenu()方法會被調用。當用戶選擇其中一項時,fragemntonContextItemSelected()方法會被調用。 ide

注:儘管你的fragment能夠分別收到它所添加的菜單項的選中事件,可是activity纔是第一個接收這些事件的傢伙,只有當activity對某個事件置之不理時,fragment才能接收到這個事件,對於菜單和快捷菜單都是這樣。 ui


處理fragement的生命週期

管理fragment的生命週期有些像管理activity的生命週期。Fragment能夠生存在三種狀態: spa

Resumed: component

Fragment在一個運行中的activity中而且可見。 htm

Paused: 生命週期

另外一個activity處於最頂層,可是fragment所在的activity並無被徹底覆蓋(頂層的activity是半透明的或不佔據整個屏幕)。 事件

Stoped: 內存

Fragment不可見。多是它所在的activity處於stoped狀態或是fragment被刪除並添加到後退棧中了。此狀態的fragment仍然存在於內存中。

一樣相似於activity,你能夠把fragment的狀態保存在一個Bundle中,在activityrecreated時就需用到這個東西。你能夠在onSaveInstanceState()方法中保存狀態並在onCreate()onCreateView()onActivityCreated()中恢復,關於更多的保存狀態的信息,請參考Activitys章節。

FragmentActivity的生命週期中最大的不一樣就是存儲到後退棧中的過程。Activity是在中止時自動被系統壓入中止棧,而且這個棧是被系統管理的;而fragment是被壓入activity所管理的一個後退棧,而且只有你在刪除fragment後並明確調用addToBackStack()方法時才被壓入。

然而,管理fragment的生命週期與管理activity的生命週期極其類似。你所須要去思考的是activity的生命週期如何影響fragment的生命週期。

http://developer.android.com/guide/components/fragments.html






協調與 activity生命週期的關係

Activity直接影響它所包含的fragment的生命週期,因此對activity的某個生命週期方法的調用也會產生對fragment相同方法的調用。例如:當activityonPause()方法被調用時,它所包含的全部的fragment們的onPause()方法都會被調用。

Fragmentactivity還要多出幾個生命週期回調方法,這些額外的方法是爲了與activity的交互而設立,以下:

onAttach()

fragment被加入到activity時調用(在這個方法中能夠得到所在的activity)。

onCreateView()

activity要獲得fragmentlayout時,調用此方法,fragment在其中建立本身的layout(界面)

onActivityCreated()

activityonCreated()方法返回後調用此方法。

onDestroyView()

fragmentlayout被銷燬時被調用。

onDetach()

fragment被從activity中刪掉時被調用。

一旦activity進入resumed狀態(也就是running狀態),你就能夠自由地添加和刪除fragment了。所以,只有當activityresumed狀態時,fragment的生命週期才能獨立的運轉,其它時候是依賴於activity的生命週期變化的。

相關文章
相關標籤/搜索