我們上次剛講了TabHost的使用,他是可以實(shí)現(xiàn)多個(gè)界面切換的,然而他現(xiàn)在已經(jīng)用的很少了,被淘汰掉了。所以今天我們給大家介紹的知識——碎片,同樣可以做到多個(gè)界面顯示和切換。

可能這樣看的還不是很明顯,那我們再來看一下他的布局切換效果。

好了,現(xiàn)在我們來看一下他是怎么實(shí)現(xiàn)的。
一、靜態(tài)實(shí)現(xiàn)
1.首先先創(chuàng)建兩個(gè)java文件,名字我起為FragOne,和FragTwo。都讓他們繼承Fragment(注意Fragment有兩個(gè)包,一個(gè)是v4的,是為了兼容低版本。還有一個(gè)是app的包。如果不需要兼容低版本就 用這個(gè)。一般情況我們都用v4的比較好)。
2.在代碼中重寫onCreateView方法。(這是Fragment的生命周期中的其中一個(gè)方法,生命周期方法可比activity多多了,這個(gè)我們以后再講。)

這兩行代碼相信大家都能看懂:我們創(chuàng)建一個(gè)View來獲取我們 的布局文件。第二個(gè)參數(shù)暫時(shí)先寫null。然后返回view引用。
3.創(chuàng)建.xml布局文件,名字我分別起為frag_one和frag_two,然后在里面添加最簡單的TextView,然后給他們寫上不同的背景顏色。

frag_two也是同樣。
4.在activity.xml中創(chuàng)建一個(gè)Fragment標(biāo)簽。
我們在里面寫兩個(gè)很重要的屬性:

name屬性是指定給我們的fragment標(biāo)簽指定碎片,就是我們想要顯示的碎片。
tools:layout屬性是我們立刻讓屬性里面的布局立馬顯示到我們的主布局中這個(gè)fragment中。
下面的fragment同樣這樣寫。
好了現(xiàn)在我們可以看一下,我么做出來的效果應(yīng)該是這樣的:

這就是我們靜態(tài)實(shí)現(xiàn)的方法,我們可以再主布局中放置多個(gè)碎片來顯示多個(gè)布局(雖然個(gè)人感覺作用不大,因?yàn)橹苯釉谥鞑季种刑砑硬季忠部梢宰龅?。=)。
接下來我們來看一下動態(tài)實(shí)現(xiàn)效果(重點(diǎn))
二、動態(tài)實(shí)現(xiàn)
1.由于上面已經(jīng)創(chuàng)建過兩個(gè)碎片和相對應(yīng)的布局了,我這里就不創(chuàng)建了。
2.我們在activity.xml中添加一個(gè)FrameLayout的標(biāo)簽,給予id,我起名為mframe(你們隨意)。
3.添加兩個(gè)按鍵,用于切換布局。(這個(gè)步驟只是為了進(jìn)行切換操作,不是只有Button可以這樣,只要是事件觸發(fā)后需要切換都可以)

3.我們在activity.java代碼中創(chuàng)建這兩個(gè)按鈕,然后實(shí)現(xiàn)點(diǎn)擊事件。(都會,就不重復(fù)了吧)
4.我們在點(diǎn)擊事件中進(jìn)行如下操作:

第一行我們創(chuàng)建了一個(gè)碎片管理者,并且通過getSupportFragmentManager方法接收實(shí)例。
第二行我們開啟了一個(gè)事務(wù),我們下面的曹組都在這個(gè)事務(wù)中。
第三行我們調(diào)用了事務(wù)的replace方法,第一個(gè)參數(shù)是我們主布局中的FrameLayout的id。第二個(gè)參數(shù)是我們新要顯示的fragment,第三個(gè)參數(shù)是一個(gè)標(biāo)簽。
第四行我們把事務(wù)關(guān)閉,這行代碼執(zhí)行過后,我們就不能進(jìn)行操作了。
第二個(gè)按鈕的邏輯同樣是這樣,只是把新要顯示的布局變成fragThree。
現(xiàn)在我們看一下效果:

其實(shí)動態(tài)的顯示不只是通過replace方法,

我們還有add方法,但是要注意了,我們是要在一個(gè)幀布局下進(jìn)行添加,add只是顯示,但是之前顯示的還在,而hide方法就是讓我們把哪個(gè)fragment隱藏起來,如果我們不寫hide方法,我們把frag_one和frag_two的背景顏色去掉,看看會發(fā)生什么:

他會一直疊上去,所以一定要記得加上hide方法。