20 Fragment介紹
Fragment表示Activity中的行為或用戶界面部分【俗可以將多個片段組合在一個 Activity 中來構(gòu)建多窗格 UI,以及在多個 Activity 中重復(fù)使用某個片段豫喧⊙ヵ耍可以將片段視為 Activity 的模塊化組成部分,它具有自己的生命周期羞延,能接收自己的輸入事件渣淳,并且可以在 Activity 運(yùn)行時(shí)添加或刪除片段(有點(diǎn)像可以在不同 Activity 中重復(fù)使用的“子 Activity”)。
片段必須始終嵌入在 Activity 中伴箩,其生命周期直接受宿主 Activity 生命周期的影響入愧。 例如晶乔,當(dāng) Activity 暫停時(shí)拗窃,其中的所有片段也會暫停;當(dāng) Activity 被銷毀時(shí)敷硅,所有片段也會被銷毀巩步。
當(dāng) Activity 正在運(yùn)行(處于已恢復(fù)生命周期狀態(tài))時(shí)旁赊,可以獨(dú)立操縱每個片段,如添加或移除它們椅野。 當(dāng)執(zhí)行此類片段事務(wù)時(shí)终畅,也可以將其添加到由 Activity 管理的返回棧—Activity 中的每個返回棧條目都是一條已發(fā)生片段事務(wù)的記錄鳄橘。 返回棧讓用戶可以通過按“返回”按鈕撤消片段事務(wù)(后退)声离。
當(dāng)將片段作為 Activity 布局的一部分添加時(shí),它存在于 Activity 視圖層次結(jié)構(gòu)的某個ViewGroup內(nèi)部瘫怜,并且片段會定義其自己的視圖布局术徊。可以通過在 Activity 的布局文件中聲明片段鲸湃,將其作為??元素插入Activity 布局中赠涮,或者通過將其添加到某個現(xiàn)有ViewGroup,利用應(yīng)用代碼進(jìn)行插入暗挑。不過笋除,片段并非必須成為 Activity 布局的一部分;還可以將沒有自己 UI 的片段用作 Activity 的不可見工作線程炸裆。
Android在 Android 3.0(API 11 級)中引入了片段垃它,主要是為了給大屏幕(如平板電腦)上更加動態(tài)和靈活的 UI 設(shè)計(jì)提供支持。由于平板電腦的屏幕比手機(jī)屏幕大得多,因此可用于組合和交換 UI 組件的空間更大国拇。利用片段實(shí)現(xiàn)此類設(shè)計(jì)時(shí)洛史,無需管理對視圖層次結(jié)構(gòu)的復(fù)雜更改。 通過將 Activity 布局分成片段酱吝,可以在運(yùn)行時(shí)修改 Activity 的外觀也殖,并在由 Activity 管理的返回棧中保留這些更改。
例如以新聞應(yīng)用為例—在平板電腦尺寸的設(shè)備上運(yùn)行時(shí)务热,該應(yīng)用可以在Activity A中嵌入兩個片段忆嗜。不過,在手機(jī)尺寸的屏幕上崎岂,沒有足以儲存兩個片段的空間捆毫,因此Activity A只包括用于顯示文章列表的片段,當(dāng)用戶選擇文章時(shí)冲甘,它會啟動Activity B冻璃,其中包括用于閱讀文章的第二個片段。因此损合,應(yīng)用可通過重復(fù)使用不同組合的片段來同時(shí)支持平板電腦和手機(jī),如圖所示娘纷。
參考:https://developer.android.com/guide/components/fragments.html
Fragment優(yōu)點(diǎn):
Fragment可以使你能夠?qū)ctivity分離成多個可重用的組件嫁审,每個都有它自己的生命周期和UI。
Fragment可以輕松得創(chuàng)建動態(tài)靈活的UI設(shè)計(jì)赖晶,可以適應(yīng)于不同的屏幕尺寸律适。從手機(jī)到平板電腦。
Fragment是一個獨(dú)立的模塊,緊緊地與activity綁定在一起遏插∥婊撸可以運(yùn)行中動態(tài)地移除、加入胳嘲、交換等厂僧。
Fragment提供一個新的方式讓你在不同的安卓設(shè)備上統(tǒng)一你的UI。
Fragment 解決Activity間的切換不流暢了牛,輕量切換颜屠。
Fragment 替代TabActivity做導(dǎo)航,性能更好鹰祸。
Fragment 在4.2.版本中新增嵌套fragment使用方法甫窟,能夠生成更好的界面效果。
Fragment做局部內(nèi)容更新更方便蛙婴,原來為了到達(dá)這一點(diǎn)要把多個布局放到一個activity里面粗井,現(xiàn)在可以用多Fragment來代替,只有在需要的時(shí)候才加載Fragment,提高性能浇衬。
Fragment可以從startActivityForResult中接收到返回結(jié)果,但是View不能懒构。