一、Fragment是什麼?
碎片布局。
Fragment是Activity中的一部分內容。我們可以在一個單獨的Activity中使用多個Fragment,用來構建UI
Panel,可以反復使用。可以想像它是Activity中的一個模塊,它有自己的生命周期,並且可以接收用戶的一些輸入事件。當Activity運行的時候,可以將它從Activity當中添加或者移除,就好比將Fragment看作是Activity的子窗口。
注意,一個Fragment都是要嵌套在Activity之中的,並且Fragment的生命周期是直接受到主Activity的生命周期的影響。例如,Activity暫停的時候,Activity中所有的Fragment都會處於暫停狀態,當Activity被消毀的時候,所有的Fragment都同樣被消毀。
當Activity在運行的時候,可以將每一個Fragment當作一個獨立的,我們可以去添加或移除它,當然這裡面也會有一個事務的概念,Activity同時還具備回退棧的概念,回退棧即按BACK鍵Fragment的一個回退機制。而Fragment的回退棧是由誰去管理的呢?是由Activity去管理的,當用戶去執行Fragment的時候,每執行一個,我們需要將它加入到一個回退棧中。因為這個Fragment是屬於Activity的,Activity會幫我們去記錄回退棧的狀態信息。
二、創建Fragment
需要聲明一個類去繼承Fragment,去處理Fragment中的一些回調方法。
如果聲明一個Fragment,至少要實現如下幾個方法:
1、onCreate();
當fragment被創建的時候會調用。可以在這個方法中去初始一些變量需要在這裡面去初始化。這個方法一般只調用一次,不會反復被調用。\
2、onCreateView();
系統會調用它來畫UI的控件,即在這之中需要加載一個View。為了畫一個UI控件給Fragment,需要在這個方法中返回一個View。通常是一個布局。可以返回null,如果這個Fragment不提供UI的話。
3、onPause()
系統第一次調用它的時候,指示用戶可能會離開這個Fragment,可是並不意味著Fragment會被銷毀,實際上通常在這裡面需要提交一些改變了的數據,即用戶要離開這個Fragment了,我們應該做數據的提交,有可能這個用戶離開之後就不再回來了。
三、將Fragment加入到Activity當中
1、在Activity的Layout中,添加一個LinearLayout,然後將Fragment拖到這個LinearLayout上放手,選擇自己已經寫好的Fragment類名即可,然後運行。(這種方式是不用編碼,用xml直接來做的)使用Fragment的一個最大的好處就是可以設計出一個非常復雜的UI布局了。
2、通過代碼編寫的方式將一個Fragment添加到一個ViewGroup當中,即添加到Activity中。
在Activity運行的任意時刻,我們都可以去加一個Fragment,加到Activity的布局當中。這樣就需要在ViewGroup中去放置一個Fragment。這種方式是開發中最常用的。
為了能在Activity運行的時候加載一個Fragment,如add、remove、replace一個Fragment,就必須使用到FragmentManager。
3、FragmentManager
FragmentManager是對碎片進行管理的,它可以進行add、remove、replace,即移除、添加或替換Fragment。將Fragment添加到哪裡去呢?可以將Fragment加到某一個指定的布局,或者是替換到某一個布局上,這也是為什麼要在Activity中的布局文件中指定一個布局id的原因。
4、為什麼需要使用FragmentTransaction?
Activity當中使用FragmentTransaction對象,主要是為了在Acivity中add、remove、replace一個Fragment之後,通過調用fragmentTransation的commit()方法,去改變對布局的影響。