淺談Android App開發(fā)中Fragment的創(chuàng)建與生命周期
Fragment是activity的界面中的一部分或一種行為。你可以把多個Fragment們組合到一個activity中來創(chuàng)建一個多面界面并且你可以在多個activity中重用一個Fragment。你可以把Fragment認為模塊化的一段activity,它具有自己的生命周期,接收它自己的事件,并可以在activity運行時被添加或刪除。
Fragment不能獨立存在,它必須嵌入到activity中,而且Fragment的生命周期直接受所在的activity的影響。例如:當activity暫停時,它擁有的所有的Fragment們都暫停了,當activity銷毀時,它擁有的所有Fragment們都被銷毀。然而,當activity運行時(在onResume()之后,onPause()之前),你可以單獨地操作每個Fragment,比如添加或刪除它們。當你在執(zhí)行上述針對Fragment的事務時,你可以將事務添加到一個棧中,這個棧被activity管理,棧中的每一條都是一個Fragment的一次事務。有了這個棧,就可以反向執(zhí)行Fragment的事務,這樣就可以在Fragment級支持“返回”鍵(向后導航)。
當向activity中添加一個Fragment時,它須置于ViewGroup控件中,并且需定義Fragment自己的界面。你可以在layoutxml文件中聲明Fragment,元素為:<fragment>;也可以在代碼中創(chuàng)建Fragment,然后把它加入到ViewGroup控件中。然而,Fragment不一定非要放在activity的界面中,它可以隱藏在后臺為actvitiy工作。
接下來講如何使用fragment,包括fragment在加入activity的后退棧中時如何保持自己的狀態(tài),如何與activity以及其它fragment們共享事件,如何顯示在activity的動作欄,等等。
Android從3.0開始引入fragment,主要是為了支持更動態(tài)更靈活的界面設計,比如在平板上的應用。平板機上擁有比手機更大的屏幕空間來組合和交互界面組件們。Fragment使你在做那樣的設計時,不需應付view樹中復雜的變化。通過把activity的layout分成fragment,你可以在activity運行時改變它的樣子,并且可以在activity的后退棧中保存這些改變。
例如:寫一個讀新聞的程序,可以用一個fragment顯示標題列表,另一個fragment顯示選中標題的內容,這兩個fragment都在一個activity上,并排顯示。那么這兩個fragment都有自己的生命周期并響應自己感興趣的事件。于是,不需再像手機上那樣用一個activity顯示標題列表,用另一個activity顯示新聞內容;現在可以把兩者放在一個activity上同時顯示出來。
Fragment必須被寫成可重用的模塊。因為fragment有自己的layout,自己進行事件響應,擁有自己的生命周期和行為,所以你可以在多個activity中包含同一個Fragment的不同實例。這對于讓你的界面在不同的屏幕尺寸下都能給用戶完美的體驗尤其重要。比如你可以在程序運行于大屏幕中時啟動包含很多fragment的activity,而在運行于小屏幕時啟動一個包含少量fragment的activity。
舉個例子--還是剛才那個讀新聞的程序-當你檢測到程序運行于大屏幕時,啟動activityA,你將標題列表和新聞內容這兩個fragment都放在activityA中;當檢測到程序運行于小屏幕時,還是啟動activityA,但此時A中只有標題列表fragment,當選中一個標題時,activityA啟動activityB,B中含有新聞內容fragment。
Fragments的生命周期
每一個fragments 都有自己的一套生命周期回調方法和處理自己的用戶輸入事件。 對應生命周期可參考下圖:
創(chuàng)建片元(Creating a Fragment)
要創(chuàng)建一個fragment,必須創(chuàng)建一個fragment的子類(或是繼承自它的子類)。fragment類的代碼看起來很像activity。它與activity一樣都有回調函數,例如onCreate(),onStart(),onPause(),和onStop()。事實上,如果你正在將一個現成的Android應用轉而使用Fragment來實現,可以簡單的將代碼從activity的回調函數移植到各自的fragment回調函數中。
一般情況下,你至少需要實現以下幾個生命周期方法:
onCreate()
在創(chuàng)建fragment時系統(tǒng)會調用此方法。在實現代碼中,你可以初始化想要在fragment中保持的那些必要組件(這里的組件是指除了view之外的東西,比如需要進行界面展示的關鍵數據),當fragment處于暫停或者停止狀態(tài)之后可重新啟用它們。
onCreateView()
在第一次為fragment繪制用戶界面時系統(tǒng)會調用此方法。為fragment繪制用戶界面,這個函數必須要返回所繪出的fragment的根View。如果fragment沒有用戶界面可以返回空。
onPause()
系統(tǒng)回調用該函數作為用戶離開fragment的第一個預兆(盡管這并不總意味著fragment被銷毀)。在當前用戶會話結束之前,通常要在這里提交任何應該持久化的變化(因為用戶可能不再返回)。
大部分應用程序都應該至少為每個fragment實現這三個方法,但是還有許多其他用以操縱fragment生命周期中各個階段的回調函數。所有生命周期中的回調函數在操縱fragment生命周期一節(jié)中稍后再做討論。
除了基類fragment,這里還有幾個你可能會繼承的子類:
DialogFragment
顯示一個浮動的對話框。使用這個類創(chuàng)建對話框是使用Activity類對話框工具方法之外的另一個不錯的選擇,因為你可以把fragment對話框并入到由activity管理的fragments后臺棧中,允許用戶返回到一個已經摒棄的fragment。
ListFragment
顯示一個由適配器管理的條目列表(例如SimpleCursorAdapter),類似于ListActivity。并且提供了許多管理列表視圖的函數,例如處理點擊事件的onListItemClick()回調函數。
PreferenceFragment
顯示一個Preference對象的體系結構列表,類似于preferenceActivity。這在為應用程序創(chuàng)建“設置”activity時是很實用的。
- Android App在ViewPager中使用Fragment的實例講解
- Android中ViewPager實現滑動指示條及與Fragment的配合
- Android App中使用ViewPager+Fragment實現滑動切換效果
- Android中使用TabHost 與 Fragment 制作頁面切換效果
- Android應用開發(fā)中Fragment與Activity間通信示例講解
- Android應用開發(fā)中Fragment間通信的實現教程
- 淺談Android app開發(fā)中Fragment的Transaction操作
- Android app開發(fā)中的Fragment入門學習教程
- Android的Fragment的生命周期各狀態(tài)和回調函數使用
- Android App中使用ListFragment的實例教程
相關文章
Android應用開發(fā)中CardView的初步使用指南
這篇文章主要介紹了Android應用開發(fā)中CardView的初步使用指南,CardView主要處理一些卡片型的視圖布局,需要的朋友可以參考下2016-02-02基于Android FileProvider 屬性配置詳解及FileProvider多節(jié)點問題
這篇文章主要介紹了基于Android FileProvider 屬性配置詳解及FileProvider多節(jié)點問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-03-03