Fragment碎片

? ? ? ? 為了讓界面可以在平板上更好地展示,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)加載:

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容