Fragment必須被寫成可重用的模塊。因爲fragment有自己的layout,自己進行事件響應,擁有自己的生命週期和行爲,所以你可以在多個activity中包含同一個Fragment的不同實例
例如:寫一個讀新聞的程序,可以用一個fragment顯示標題列表,另一個fragment顯示選中標題的內容,這兩個fragment都在一個 activity上,並排顯示。那麼這兩個fragment都有自己的生命週期並響應自己感興趣的事件。於是,不需再像手機上那樣用一個activity 顯示標題列表,用另一個activity顯示新聞內容;現在可以把兩者放在一個activity上同時顯示出來。如下圖:
處理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的生命週期。