(孤山不見蓬萊客,點點星雲落九洲) 什麼是碎片? 碎片(Fragment)是一種可以嵌入在活動當中的UI片段,它能讓程式更加合理和充分地利用大屏幕的空間,因而在平板上應用的非常廣泛。可以把Fragment當成Activity一個界面的一部分,那麼 Activity的界面就由完全不同的Fragment ...
(孤山不見蓬萊客,點點星雲落九洲)
什麼是碎片?
碎片(Fragment)是一種可以嵌入在活動當中的UI片段,它能讓程式更加合理和充分地利用大屏幕的空間,因而在平板上應用的非常廣泛。可以把Fragment當成Activity一個界面的一部分,那麼 Activity的界面就由完全不同的Fragment組成,且Fragment有自己的聲明周期和接收、處理用戶的事件,支持動態的添加、替換、移除某個Fragment。
為什麼使用碎片?
我們知道,Android上的界面展示都是通過Activity實現的,但Activity也有它的局限性,同樣的界面在手機上顯示可能很好看,在平板上就未必了,因為平板的屏幕非常大,手機的界面放在平板上可能會有過分被拉長、控制項間距過大等情況。這個時候更好的體驗效果是在Activity中嵌入"小Activity",然後每個"小Activity"又可以擁有自己的佈局。這就用到了Fragment。
比如我們想做一個新聞應用,其中一個界面使用ListView展示了一組新聞的標題,當點擊了其中一個標題,就打開另一個界面顯示新聞的詳細內容。如果是在手機豎屏時,我們可以將新聞標題列表放在一個Activity中,將新聞的詳細內容放在另一個Activity中,如下圖所示。
但是在平板設計中,橫屏時的顯示就是下麵這種情況,列表會被拉長
因此,更好的設計方案是將新聞標題列表界面和新聞詳細內容界面分別放在兩個Fragment中,然後在同一個Activity中引入這兩個Fragment,如下圖所示。
Fragment的特點:
(1)Fragment依賴於Activity,不能獨立存在。
(2)一個Activity里可以有多個Fragment。
(3)一個Fragment可以被多個Activity重用。
(4)Fragment有自己的生命周期,並能接收輸入事件。
(5)可以在Activity運行時動態地添加或刪除Fragment。
Fragment優點:
(1)模塊化(Modularity):不必把所有代碼全部寫在Activity中,而是把代碼寫在各自的Fragment中。
(2)可重用(Reusability):多個Activity可以重用一個Fragment。
(3)可適配(Adaptability):根據硬體的屏幕尺寸、屏幕方向,能夠方便地實現不同的佈局,獲得更好的用戶體驗。
Fragment生命周期:
Fragment 的生命周期如圖所示,關於每個方法的解釋如下:
OnAttach():Fragment和Activity相關聯時調用。可以通過該方法獲取Activity引用,還可以通過getArguments()獲取參數。
OnCreate():Fragment被創建時調用。
OnCreateView():創建Fragment的佈局。
OnActivityCreated():當Activity完成onCreate()時調用。
OnStart():當Fragment可見時調用。
OnResume():當Fragment可見且可交互時調用。
OnPause():當Fragment不可交互但可見時調用。
OnStop():當Fragment不可見時調用。
OnDestroyView():當Fragment的UI從視圖結構中移除時調用。
OnDestroy():銷毀Fragment時調用。
OnDetach():當Fragment和Activity解除關聯時調用。
上面的方法中,只有OnCreateView()在重寫時不用寫super方法,其他都需要。
Fragment使用方法:
在Activity中添加Fragment的方式有兩種:
(1)靜態添加:通過xml的方式添加,即在佈局頁面中直接添加,缺點是一旦添加就不能在運行時刪除。
(2)動態添加:在Activity中添加,運行時添加,這種方式比較靈活,建議使用這種方式。
註:基礎實戰參考博文:Android Fragment完全解析,Android Fragment的用法,手把手基礎的Fragment用法,上手容易。
如果想深入瞭解Fragment的背後運行機制,可以參考這篇博文《Android Fragment 非常詳細的一篇》,內部運行機制講的很詳細。