相關文章:html
一、《Fragment詳解之一——概述》
二、《Fragment詳解之二——基本使用方法》
三、《Fragment詳解之三——管理Fragment(1)》
四、《Fragment詳解之四——管理Fragment(2)》
五、《Fragment詳解之五——Fragment間參數傳遞》
六、《Fragment詳解之六——如何監聽fragment中的回退事件與怎樣保存fragment狀態》java
今天開始給你們總結下有關Fragment使用方法的東東,內容比較多,這個系列能夠要寫的博客數量會多一點。android
Android在3.0中引入了fragments的概念,主要目的是用在大屏幕設備上–例如平板電腦上,支持更加動態和靈活的UI設計。平板電腦的屏 幕要比手機的大得多,有更多的空間來放更多的UI組件,而且這些組件之間會產生更多的交互。Fragment容許這樣的一種設計,而不須要你親自來管理 viewhierarchy的複雜變化。 經過將activity的佈局分散到fragment中, 你能夠在運行時修改activity的外觀,並在由activity管理的back stack中保存那些變化.(http://developer.android.com/guide/topics/fundamentals/fragments.html)
例如, 一個新聞應用能夠在屏幕左側使用一個fragment來展現一個文章的列表,而後在屏幕右側使用另外一個fragment來展現一篇文章–2個 fragment並排顯示在相同的一個activity中,而且每個fragment擁有它本身的一套生命週期回調方法,而且處理它們本身的用戶輸入事 件。 所以, 取代使用一個activity來選擇一篇文章而另外一個activity來閱讀文章的方式,用戶能夠在同一個activity中選擇一篇文章而且閱讀, 如圖所示:
設計模式
fragment在你的應用中應當是一個模塊化和可重用的組件.即,由於fragment定義了它本身的佈局, 以及經過使用它本身的生命週期回調方法定義了它本身的行爲,你能夠將fragment包含到多個activity中. 這點特別重要, 由於這容許你將你的用戶體驗適配到不一樣的屏幕尺寸.舉個例子,你可能會僅當在屏幕尺寸足夠大時,在一個activity中包含多個fragment,並 且,當不屬於這種狀況時,會啓動另外一個單獨的,使用不一樣fragment的activity.
繼續以前那個新聞的例子 – 當運行在一個特別大的屏幕時(例如平板電腦),應用能夠在Activity A中嵌入2個fragment。然而,在一個正常尺寸的屏幕(例如手機)上,沒有足夠的空間同時供2個fragment用, 所以, Activity A會僅包含文章列表的fragment, 而當用戶選擇一篇文章時, 它會啓動ActivityB,它包含閱讀文章的fragment.所以, 應用能夠同時支持上圖中的2種設計模式。
架構
Fragment可使你可以將activity分離成多個可重用的組件,每一個都有它本身的生命週期和UI。ide
Fragment能夠輕鬆得建立動態靈活的UI設計,能夠適應於不一樣的屏幕尺寸。從手機到平板電腦。模塊化
Fragment是一個獨立的模塊,牢牢地與activity綁定在一塊兒。能夠運行中動態地移除、加入、交換等。函數
Fragment提供一個新的方式讓你在不一樣的安卓設備上統一你的UI。佈局
Fragment 解決Activity間的切換不流暢,輕量切換。性能
Fragment 替代TabActivity作導航,性能更好。
Fragment 在4.2.版本中新增嵌套fragmeng使用方法,可以生成更好的界面效果。
Fragment作局部內容更新更方便,原來爲了到達這一點要把多個佈局放到一個activity裏面,如今能夠用多Fragment來代替,只有在須要的時候才加載Fragment,提升性能
如圖一,是Fragment的生命週期;圖二,是Activity與Fragment生命週期的對比圖;
圖一 圖二
咱們下面以Fragment的生命流程爲主,伴着Activity的生命週期來說;
onAttach:onAttach() 在fragment與Activity關聯以後調調查用。須要注意的是,初始化fragment參數能夠從getArguments()得到,可是,當 Fragment附加到Activity以後,就沒法再調用setArguments()。因此除了在最開始時,其它時間都沒法向初始化參數添加內容。有 關Fragment參數初始化及傳遞的問題,咱們會在後面的篇章中細講。
onCreate:fragment 初次建立時調用。儘管它看起來像是Activity的OnCreate()函數,但這個只是用來建立Fragment的。此時的Activity尚未創 建完成,由於咱們的Fragment也是Activity建立的一部分。因此若是你想在這裏使用Activity中的一些資源,將會獲取不到。好比:獲取 同一個Activity中其它Frament的控件實例。(代碼以下:),若是想要得到Activity相關聯的資源,必須在 onActivityCreated中獲取。
具體緣由參見onActivityCreated;
[java] view plain copy
/**
*若是把這段代碼放到Fragment的onCreate()中,那麼btnTry的值將會是NULL。
*注意:getActivity()是有值的,由於一旦Activity與Fragment Attached就能夠經過getActivity()來獲取相關聯的Activity的實例。
*/
Button btnTry = getActivity().findViewById(R.id.btn_try);
onCreateView:在這個fragment構造它的用戶接口視圖(即佈局)時調用。在這裏指望返回此Fragment的一個視圖層次結構。使用LayoutInflater的inflater()方法來構造實圖。代碼以下:
[java] view plain copy
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment3, container, false);
}
其中LayoutInflater::inflate()的函數聲明以下:
[java] view plain copy
public View inflate(int resource, ViewGroup root, boolean attachToRoot)
其中第二個參數:container,能夠爲NULL,若是父窗口值爲NULL,這意味着該Fragment不可見,由於它沒有附加到任何的視圖層次中。
最 後一個參數:boolean attachToRoot:通常爲FALSE,它的意義爲,是否當前XML的根結點做爲整個APP視圖的根結點,若是設爲TRUE,那返回的VIEW將是 整個APP視圖架構的根結點,咱們通常不須要這麼作。由於咱們的Fragment是依附於Activity的,Activity上可能有其它控件,咱們的 Fragment只是其中的一個小分支,若是這裏設爲TRUE,那麼Fragment之外的分支將被所有刪除,整個APP視圖將會只有Fragment;
onActivityCreated:在Activity的OnCreate()結束後,會調用此方法。因此到這裏的時候,Activity已經建立完成!在這個函數中才可使用Activity的全部資源。若是把下面的代碼放在這裏,獲取到的btn_Try的值將不會再是空的!
[java] view plain copy
Button btnTry = getActivity().findViewById(R.id.btn_try);
onStart:當 到OnStart()時,Fragment對用戶就是可見的了。但用戶還未開始與Fragment交互。在生命週期中也能夠看到Fragment的 OnStart()過程與Activity的OnStart()過程是綁定的。意義便是同樣的。之前你寫在Activity的OnStart()中來處理 的代碼,用Fragment來實現時,依然能夠放在OnStart()中來處理。
onResume:當 這個fragment對用戶可見而且正在運行時調用。這是Fragment與用戶交互以前的最後一個回調。從生命週期對比中,能夠看到,Fragment 的OnResume與Activity的OnResume是相互綁定的,意義是同樣的。它依賴於包含它的activity的 Activity.onResume。當OnResume()結束後,就能夠正式與用戶交互了。
onPause:此回調與Activity的OnPause()相綁定,與Activity的OnPause()意義同樣。
onStop:這個回調與Activity的OnStop()相綁定,意義同樣。已中止的Fragment能夠直接返回到OnStart()回調,而後調用OnResume()。
onDestroyView:如 果Fragment即將被結束或保存,那麼撤銷方向上的下一個回調將是onDestoryView()。會將在onCreateView建立的視圖與這個 fragment分離。下次這個fragment若要顯示,那麼將會建立新視圖。這會在onStop以後和onDestroy以前調用。這個方法的調用同 onCreateView是否返回非null視圖無關。它會潛在的在這個視圖狀態被保存以後以及它被它的父視圖回收以前調用。
onDestroy:當這個fragment再也不使用時調用。須要注意的是,它即便通過了onDestroy()階段,但仍然能從Activity中找到,由於它尚未Detach。
onDetach:Fragment生命週期中最後一個回調是onDetach()。調用它之後,Fragment就再也不與Activity相綁定,它也再也不擁有視圖層次結構,它的全部資源都將被釋放。
參考文章:
一、android之Fragment(官網資料翻譯)
二、Android Fragment 入門介紹
三、Android中的Fragment詳解
四、【Android 開發教程】Fragment的生命週期
五、Fragment生命週期及其與activity的關係
六、Fragment(一)概述
若是本文有幫到你,記得加關注哦
請你們尊重原創者版權,轉載請標明出處:http://blog.csdn.net/harvic880925/article/details/44917955 , 謝謝