Fragment是Android 3.0 (Honeycomb)被引入的。主要目的是為了給大屏幕(如平板電腦)上更加動態(tài)和靈活的UI設計提供支持。由于平板電腦的屏幕比手機的屏幕大很多,因此可用于組合和交換的UI組件的空間更大,利用Fragment實現(xiàn)此類設計的時,就無需管理對視圖層次結構的復雜更改。
通過將 Activity 布局分成片段,您可以在運行時修改 Activity 的外觀,并在由 Activity 管理的返回棧中保留這些更改。如果僅僅只有Activity布局,那是不夠的,不僅在手機上有一套布局,同時在平板上還需要設計一套布局,那樣維護起來也麻煩,代碼上也有一定的冗余,對于APP包的大小也有一定的壓力。Fragment的優(yōu)勢是布局在不同設備上的適配。
比如:

從圖中我們可以看到,在平板中,一個Activity A包含了兩個Fragment,分別是Fragment A和Fragment B,但在手機中呢,就需要兩個Activity,分別是Activity A包含F(xiàn)ragment A和Activity B包含F(xiàn)ragment B。同時每個Fragment都具有自己的一套生命周期回調方法,并各自處理自己的用戶輸入事件。 因此,在平板中使用一個Activity 就可以了,左側是列表,右邊是內(nèi)容詳情。
除此之外,使用Fragment還有這么幾個方面優(yōu)勢:
代碼復用。特別適用于模塊化的開發(fā),因為一個Fragment可以被多個Activity嵌套,有個共同的業(yè)務模塊就可以復用了,是模塊化UI的良好組件。
Activity用來管理Fragment。Fragment的生命周期是寄托到Activity中,F(xiàn)ragment可以被Attach添加和Detach釋放。
可控性。Fragment可以像普通對象那樣自由的創(chuàng)建和控制,傳遞參數(shù)更加容易和方便,也不用處理系統(tǒng)相關的事情,顯示方式、替換、不管是整體還是部分,都可以做到相應的更改。
Fragments是view controllers,它們包含可測試的,解耦的業(yè)務邏輯塊,由于Fragments是構建在views之上的,而views很容易實現(xiàn)動畫效果,因此Fragments在屏幕切換時具有更好的控制。