最近事情很忙,一個新項目趕著出來,但是很多功能都要重新做,一直在編寫代碼、Debug。今天因為一個新程序要使用Fragment來做,雖然以前也使用過Fragment,不過沒有仔細研究,今天順道寫篇文章記錄一下Fragment的使用。這文章主要參考了Android官網的介紹。
Fragment是Android3.0后增加的新控件,有點類似于Activity組件,也是用來承載各種View元素。Google增加這個玩意的目的是為了平板電腦里面可以復用部分顯示的View,只要寫好一個View,可以同時在手機和平板等不同尺寸的設備上使用。而且這個轉換過程系統幫你搞定了。下面我們分類說說Fragment的使用。
1、為何使用Fragment
下面是Android官網為了說明Fragment作用的例子:一個新聞應用可以在屏幕左側使用一個fragment來展示一個文章的列表,然后在屏幕右側使用另一個fragment來展示一篇文章--2個fragment并排顯示在相同的一個activity中,并且每一個fragment擁有它自己的一套生命周期回調方法,并且處理它們自己的用戶輸入事件。 因此, 取代使用一個activity來選擇一篇文章而另一個activity來閱讀文章的方式,用戶可以在同一個activity中選擇一篇文章并且閱讀, 如圖所示:
當運行在一個特別大的屏幕時(例如平板電腦),應用可以在Activity A中嵌入2個fragment。但是如果在一個正常尺寸的屏幕(例如手機)上,沒有足夠的空間同時供2個fragment用, 因此, Activity A會僅包含文章列表的fragment, 而當用戶選擇一篇文章時, 它會啟動ActivityB,它包含閱讀文章的fragment.因此, 應用可以同時支持上圖中的2種設計模式。
fragment是一個為了界面視圖可以重用的組件,因為fragment定義了它自己的布局, 以及通過使用它自己的生命周期回調方法定義了它自己的行為,你可以將fragment包含到多個activity中. 這點特別重要, 因為這允許你將你的用戶體驗適配到不同的屏幕尺寸.舉個例子,你可能會僅當在屏幕尺寸足夠大時,在一個activity中包含多個fragment,并且,當不屬于這種情況時,會啟動另一個單獨的,使用不同fragment的activity。
2、創建Fragment
要創建一個Fragment, 必須創建一個 Fragment 的子類 (或者繼承自一個已存在的它的子類)。Fragment類的代碼看起來很像 Activity 。它包含了和activity類似的回調方法, 例如onCreate()、 onStart()、onPause()以及 onStop()。事實上, 如果你準備將一個現成的Android應用轉換到使用fragment,可能只需簡單的將代碼從你的activity的回調方法分別移動到你的fragment的回調方法即可。
下面我們看看Fragment的子類有哪些:
•DialogFragment 顯示一個浮動的對話框。用這個類來創建一個對話框,是使用在Activity類的對話框工具方法之外的一個好的選擇, 因為你可以將一個fragment對話框合并到activity管理的fragment back stack中,允許用戶返回到一個之前曾被摒棄的fragment。
•ListFragment 顯示一個由一個adapter(例如 SimpleCursorAdapter)管理的項目的列表, 類似于ListActivity。 它提供一些方法來管理一個list view, 例如onListItemClick()回調來處理點擊事件。
•PreferenceFragment 顯示一個 Preference對象的層次結構的列表, 類似于PreferenceActivity。 這在為你的應用創建一個"設置"activity時有用處。
3、Fragment生命周期
下面是Fragment的生命周期圖,摘自Android官網。
繼承了Fragment相關類之后,我們需要重寫幾個回調函數,實現相關功能,下面面3個函數是我們一般都會重寫的回調方法:
//返回View給Activity使用
public View onCreateView()
{}
public void onPause()
{}
}
4、創建Fragment
fragment通常用來作為一個activity的用戶界面的一部分,并將它的layout提供給activity。為了給一個fragment提供一 個layout,你必須實現 onCreateView()回調方法, 當到了fragment繪制它自己的layout的時候,Android系統調用它。你的此方法的實現代碼必須返回一個你的fragment的 layout的根view。
另外,如果你的fragment是ListFragment的子類,它的默認實現是返回從onCreateView()返回一個ListView,所以一般情況下不必實現它。
從onCreateView()返回的View, 也可以從一個layout的xml資源文件中讀取并生成。為了幫助你這么做, onCreateView() 提供了一個LayoutInflater 對象。
下面看個例子,從XML加載視圖View,跟我們一般的View里面動態加載解析XML生成View一樣。
•RSID:想要加載的layout的resource ID。
•container:加載的layout的父ViewGroup. 傳入container是很重要的, 目的是為了讓系統接受所要加載的layout的根view的layout參數, 由它將掛靠的父view指定。
•布爾量:指示在加載期間, 展開的layout是否應當附著到ViewGroup(第二個參數) (在這個例子中, 指定了false, 因為系統已經把展開的layout插入到container
主站蜘蛛池模板:
陇川县|
华容县|
勃利县|
凤阳县|
兰溪市|
金昌市|
河北省|
阿克陶县|
霍城县|
随州市|
侯马市|
青州市|
收藏|
通山县|
中山市|
韩城市|
临洮县|
北流市|
郴州市|
射洪县|
乐业县|
阿拉善左旗|
云霄县|
台东市|
明溪县|
化隆|
兴文县|
且末县|
探索|
兴化市|
于都县|
简阳市|
井研县|
宜宾县|
巴林左旗|
仁寿县|
嘉义县|
太湖县|
甘孜县|
米林县|
林西县|