? ? ? ? 為了讓界面可以在平板上更好地展示,Android在3.0版本引入了Fragment(碎片)功能,它非常類似于Activity,可以像Activity一樣包含布局。Fragment通常是嵌套在Activity中使用的,現(xiàn)在想象這種場景:有兩個Fragment,F(xiàn)ragment 1包含了一個ListView,每行顯示一本書的標(biāo)題。Fragment 2包含了TextView和ImageView,來顯示書的詳細(xì)內(nèi)容和圖片。
Fragment特點:
? ? ? ? Fragment是Android3.0后引入的一個新的API,他出現(xiàn)的初衷是為了適應(yīng)大屏幕的平板電腦, 當(dāng)然現(xiàn)在他仍然是平板APP UI設(shè)計的寵兒,而且我們普通手機開發(fā)也會加入這個Fragment, 我們可以把他看成一個小型的Activity,又稱Activity片段!想想,如果一個很大的界面,我們 就一個布局,寫起界面來會有多麻煩,而且如果組件多的話是管理起來也很麻煩!
? ? ? ? ? 而使用Fragment 我們可以把屏幕劃分成幾塊,然后進行分組,進行一個模塊化的管理!從而可以更加方便的在 運行過程中動態(tài)地更新Activity的用戶界面!
? ? ? ? ? ? 另外Fragment并不能單獨使用,他需要嵌套在Activity 中使用,盡管他擁有自己的生命周期,但是還是會受到宿主Activity的生命周期的影響,比如Activity 被destory銷毀了,他也會跟著銷毀!
Fragment使用:
? ? ? ? ? ?首先需要注意,F(xiàn)ragment是在3.0版本引入的,如果你使用的是3.0之前的系統(tǒng),需要先導(dǎo)入android-support-v4的jar包才能使用Fragment功能。
加載方式有兩種:
? ? ? 1、動態(tài)加載:
? ? ? ? ? ? 動態(tài)添加Fragment主要分為4步:
? ? ? ? ? ? ? 1、獲取到FragmentManager,在Activity中可以直接通過getFragmentManager得到。
? ? ? ? ? ? ? 2、開啟一個事務(wù),通過調(diào)用beginTransaction方法開啟。
? ? ? ? ? ? ? 3、向容器內(nèi)加入Fragment,一般使用replace方法實現(xiàn),需要傳入容器的id和Fragment的實例。
? ? ? ? ? ? 4、提交事務(wù),調(diào)用commit方法提交。
? ? ? ? ? 圖解:

? ? ? ? FragmentManager:
? ? ? ? ? ? ? 要管理activity中的fragments,你就需要使用FragmentManager。
? ? ? ? ? ? ? ?通過getFragmentManager()或getSupportFragmentManager()獲得
? ? ? ? ? 例:fm = getSupportFragmentManager();
? ? ? ? ? ? ? ? ? ? ?fa = new Fragment_A();
? ? ? ? ? ? ? ? ? ? ?FragmentTransaction ft = fm.beginTransaction();
? ? ? ? ? ? ? ? ? ? ? ? ? ?ft.add(R.id.rl, fa);
? ? ? ? ? ? ? ? ? ? ? ? ? ?ft.commit();
? ? ? ? ? FragmentTransaction一般用來對當(dāng)前的Fragment進行管理,常用的針對Fragment的方法有:
? ? ? ? ? ? ? ? 1、將一個fragment實例添加到Activity的最層、add(int?containerViewId,?Fragment?fragment);
? ? ? ? ? ? ? ? 例:


? ? ? ? ? ? ?2、將一個fragment實例添加到Activity的最上層add(int?containerViewId,?Fragment?fragment);
? ? ? ? ? ? 3、將一個fragment實例從Activity的fragment隊列中刪除
? ? ? ? ? ? 4、remove(Fragment fragment);
? ? ? ? ? ? 5、替換containerViewId中的fragment實例,注意,它首先把containerViewId中所有fragment刪除,然后再add進去當(dāng)前的fragment
? ? ? ? ? ? 6、replace(int containerViewId, Fragment fragment);
? ? ? ? ? ? ?例:

? ? ? ? ? ? ? hide()、show()public FragmentTransaction hide(Fragment fragment);//將指定的fragment隱藏不顯示public?FragmentTransaction?show(Fragment?fragment);//將以前hide()過的fragment顯示出來
? ? ? ? ? ? ? ? 例:
?? ?2、靜態(tài)加載: