android Fragments詳解六:處理fragement的生命週期
把條目新增到動作欄
你的fragment們可以向activity的選單(按Manu鍵時出現的東西)新增項,同時也可向動作欄(介面中頂部的那個區域)新增條目,這都需通過實現方法onCreateOptionManu()來完成。
你從fragment新增到選單的任何條目,都會出現在現有選單項之後。Fragment之後可以通過方法onOptionsItemSelected()來響應自己的選單項被選擇的事件。
你也可以在fragemnt中註冊一個view來提供快捷選單(上下文選單)。當使用者要開啟快捷選單時,fragment的onCreateContextMenu()方法會被呼叫。當使用者選擇其中一項時,fragemnt的onContextItemSelected()方法會被呼叫。
注:儘管你的fragment可以分別收到它所新增的選單項的選中事件,但是activity才是第一個接收這些事件的傢伙,只有當activity對某個事件置之不理時,fragment才能接收到這個事件,對於選單和快捷選單都是這樣。
處理fragement的生命週期
管理fragment的生命週期有些像管理activity的生命週期。Fragment可以生存在三種狀態:
Resumed:
Fragment在一個執行中的activity中並且可見。
Paused:
另一個activity處於最頂層,但是fragment所在的activity並沒有被完全覆蓋(頂層的activity是半透明的或不佔據整個螢幕)。
Stoped:
Fragment不可見。可能是它所在的activity處於stoped狀態或是fragment被刪除並新增到後退棧中了。此狀態的fragment仍然存在於記憶體中。
同樣類似於activity,你可以把fragment的狀態儲存在一個Bundle中,在activity被recreated時就需用到這個東西。你可以在onSaveInstanceState()方法中儲存狀態並在onCreate()或onCreateView()或onActivityCreated()中恢復,關於更多的儲存狀態的資訊,請參考Activitys章節。
Fragment與Activity的生命週期中最大的不同就是儲存到後退棧中的過程。Activity是在停止時自動被系統壓入停止棧,並且這個棧是被系統管理的;而fragment是被壓入activity所管理的一個後退棧,並且只有你在刪除fragment後並明確呼叫addToBackStack()方法時才被壓入。
然而,管理fragment的生命週期與管理activity的生命週期極其相似。你所需要去思考的是activity的生命週期如何影響fragment的生命週期。
協調與activity生命週期的關係
Activity直接影響它所包含的fragment的生命週期,所以對activity的某個生命週期方法的呼叫也會產生對fragment相同方法的呼叫。例如:當activity的onPause()方法被呼叫時,它所包含的所有的fragment們的onPause()方法都會被呼叫。
Fragment比activity還要多出幾個生命週期回撥方法,這些額外的方法是為了與activity的互動而設立,如下:
onAttach()
當fragment被加入到activity時呼叫(在這個方法中可以獲得所在的activity)。
onCreateView()
當activity要得到fragment的layout時,呼叫此方法,fragment在其中建立自己的layout(介面)。
onActivityCreated()
當activity的onCreated()方法返回後呼叫此方法。
onDestroyView()
當fragment的layout被銷燬時被呼叫。
onDetach()
當fragment被從activity中刪掉時被呼叫。
一旦activity進入resumed狀態(也就是running狀態),你就可以自由地新增和刪除fragment了。因此,只有當activity在resumed狀態時,fragment的生命週期才能獨立的運轉,其它時候是依賴於activity的生命週期變化的。
轉自:http://blog.csdn.net/niu_gao/article/details/7185189
相關文章
- android Fragments詳解七:fragement示例AndroidFragment
- Android View的生命週期詳解AndroidView
- Android Activity生命週期詳解Android
- vue生命週期詳解Vue
- React生命週期詳解React
- 詳解vue生命週期Vue
- Service生命週期詳解
- Vue的生命週期的詳解Vue
- Android生命週期元件Lifecycle使用詳解Android元件
- Java類的生命週期詳解Java
- 詳解Vue生命週期【上】Vue
- React 元件生命週期詳解React元件
- React元件生命週期詳解React元件
- Android Activity的生命週期和啟動模式詳解Android模式
- Omi教程-生命週期和事件處理事件
- [譯] Android 生命週期備忘錄 — 第三部分:FragmentsAndroidFragment
- 詳解 Vue 生命週期實現Vue
- [Android]Activity的生命週期Android
- Android MediaPlayer的生命週期Android
- android:碎片的生命週期Android
- Fragment 生命週期的詳情Fragment
- Android Service生命週期 Service裡面的onStartCommand()方法詳解Android
- android Fragments詳解一:概述AndroidFragment
- Android Activity生命週期Android
- Activity的生命週期和啟動模式詳解模式
- Servlet簡介及其生命週期詳解Servlet
- android Fragments詳解二:建立FragmentAndroidFragment
- android Fragments詳解四:管理fragmentAndroidFragment
- Android之各生命週期Android
- Android Activit生命週期方法Android
- Android官方架構元件Lifecycle:生命週期元件詳解&原理分析Android架構元件
- 生命週期詳細解讀(含部分原始碼)原始碼
- Vue生命週期詳解+對應程式碼解析Vue
- React原始碼分析3—React生命週期詳解React原始碼
- 圖解vue生命週期圖解Vue
- 2_Bean的生命週期和常見的後處理器Bean
- android解鎖屏時Activity生命週期的變化Android
- 詳解Spring中Bean的作用域與生命週期SpringBean