軟件開發(fā)工具:第8章 Fragment_第1頁
軟件開發(fā)工具:第8章 Fragment_第2頁
軟件開發(fā)工具:第8章 Fragment_第3頁
軟件開發(fā)工具:第8章 Fragment_第4頁
軟件開發(fā)工具:第8章 Fragment_第5頁
已閱讀5頁,還剩13頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、鄭州大學(xué)信息工程學(xué)院第8章 Fragment點(diǎn)擊添加文本鄭州大學(xué)信息工程學(xué)院8.1 Fragment概述8.2 Fragment的生命周期8.3 Fragment使用8.4 Fragment加入Activity8.5 使用Fragment舉例本章導(dǎo)讀 Android是在Android 3.0 (API level 11)開始引入Fragment的??梢园袴ragment想成Activity中的模塊,這個(gè)模塊有自己的布局,有自己的生命周期,單獨(dú)處理自己的輸入,在Activity運(yùn)行的時(shí)候可以加載或者移除Fragment模塊。本章主要內(nèi)容有:(1)Fragment的概述和生命周期;(2)Fragm

2、ent使用注意事項(xiàng);(3)如何把Fragment加入Activity及使用舉例等。(不講,要求自學(xué))8.1 Fragment概述 當(dāng)開發(fā)的應(yīng)用程序同時(shí)適用于平板電腦和手機(jī)時(shí),可以利用Fragment實(shí)現(xiàn)靈活的布局,改善用戶體驗(yàn)。可以把Fragment設(shè)計(jì)成可以在多個(gè)Activity中復(fù)用的模塊。也可以組合多個(gè)Fragment放在一個(gè)單獨(dú)的Activity中來創(chuàng)建一個(gè)多界面區(qū)域的UI,并可以在多個(gè)Activity里重用某一個(gè)Fragment。把Fragment想象成一個(gè)Activity的模塊化區(qū)域,有它自己的生命周期,接收屬于它的輸入事件,并且可以在Activity運(yùn)行期間添加和刪除。 將一個(gè)F

3、ragment作為Activity布 局的一部分添加進(jìn)來時(shí),它處在Activity的view hierarchy中的ViewGroup中,并且定義有它自己的view布局。通過在Activity的布局文件中聲明Fragment來插入一個(gè)Fragment到Activity布局中,或者可以寫代碼將它添加到一個(gè)已存在的ViewGroup。然而,F(xiàn)ragment并不一定必須是Activity布局的一部分;也可以將一個(gè)Fragment作為Activity的隱藏的后臺工作者。8.1 Fragment概述 因?yàn)镕ragment必須嵌入在Acitivity中使用,所以Fragment的生命周期和它所在的Acti

4、vity是密切相關(guān)的。如果Activity是暫停狀態(tài),其中所有的Fragment都是暫停狀態(tài);如果Activity是stopped狀態(tài),這個(gè)Activity中所有的Fragment都不能被啟動;如果Activity被銷毀,那么它其中的所有Fragment都會被銷毀。 但是,當(dāng)Activity在活動狀態(tài),可以獨(dú)立控制Fragment的狀態(tài),比如加上或者移除Fragment。當(dāng)這樣進(jìn)行fragment transaction(轉(zhuǎn)換)的時(shí)候,可以把Fragment放入Activity的back stack中,這樣用戶就可以進(jìn)行返回操作。8.2 Fragment的生命周期(1)當(dāng)一個(gè)Fragment被

5、創(chuàng)建的時(shí)候,它會經(jīng)歷以下狀態(tài):onAttach()onCreate()onCreateView()onActivityCreated()。(2)當(dāng)這個(gè)Fragment對用戶可見的時(shí)候,它會經(jīng)歷以下狀態(tài):onStart()onResume()。(3)當(dāng)這個(gè)Fragment進(jìn)入后臺的時(shí)候,它會經(jīng)歷以下狀態(tài):onPause()onStop()。(4)當(dāng)這個(gè)Fragment被銷毀了(或者持有它的Activity被銷毀了),它會經(jīng)歷以下狀態(tài):onPause()onStop()onDestroyView()onDestroy()onDetach()。(5)一旦Activity進(jìn)入Resumed狀態(tài)(也就是

6、Running狀態(tài)),你就可以自由地添加和刪除Fragment了。因此,只有當(dāng)Activity在Resumed狀態(tài)時(shí),F(xiàn)ragment的生命周期才能獨(dú)立地運(yùn)轉(zhuǎn),其它時(shí)候是依賴于Activity的生命周期變化的。8.3 Fragment使用 使用Fragment時(shí),需要繼承Fragment或者Fragment的子類(DialogFragment, ListFragment, PreferenceFragment, WebViewFragment),所以Fragment的代碼看起來和Activity的類似。(1)使用Support LibrarySupport Library是一個(gè)提供了API庫函

7、數(shù)的JAR文件,這樣就可以在舊版本的Android上使用一些新版本的APIs。比如android-support-v4.jar,它的完整路徑是:/extras/android/support/v4/android-support-v4.jar.它就提供了Fragment的APIs,使得在Android 1.6 (API level 4) 以上的系統(tǒng)都可以使用Fragment。為了確定沒有在舊版本系統(tǒng)上使用新版本的APIs,需要如下導(dǎo)入語句:import android.support.v4.app.Fragment; import android.support.v4.app.Fragment

8、Manager;同時(shí)應(yīng)該將上述的包拷入libs項(xiàng)目下的libs文件夾,然后在項(xiàng)目的 Properties中添加:右鍵單擊項(xiàng)目,選Properties,左邊選Java Build Path,然后Add External JARs,添加android-support-v4.jar。當(dāng)創(chuàng)建包含F(xiàn)ragment的Activity時(shí),如果用的是Support Library,那么繼承的就應(yīng)該是FragmentActivity而不是Activity。8.3 Fragment使用(2)必須實(shí)現(xiàn)的三個(gè)回調(diào)函數(shù)onCreate():系統(tǒng)在創(chuàng)建Fragment的時(shí)候調(diào)用這個(gè)方法,這里應(yīng)該初始化相關(guān)的組件,一些即便

9、是被暫停或者被停止時(shí)依然需要保留的東西。onCreateView():當(dāng)?shù)谝淮卫L制Fragment的UI時(shí)系統(tǒng)調(diào)用這個(gè)方法,必須返回一個(gè)View,如果Fragment不提供UI也可以返回null。注意,如果繼承自ListFragment,onCreateView()默認(rèn)的實(shí)現(xiàn)會返回一個(gè)ListView,所以不用自己實(shí)現(xiàn)。onPause():當(dāng)用戶離開Fragment時(shí)第一個(gè)調(diào)用這個(gè)方法,需要提交一些變化,因?yàn)橛脩艉芸赡懿辉俜祷貋怼?.3 Fragment使用(3)實(shí)現(xiàn)Fragment的UI提供Fragment的UI,必須實(shí)現(xiàn)onCreateView()方法。假設(shè)Fragment的布局設(shè)置寫在e

10、xample_fragment.xml資源文件中,那么onCreateView()方法可以如下寫:public static class ExampleFragment extends Fragment Override public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) / Inflate the layout for this fragment return inflater.inflate(R.layout.example_fragment, co

11、ntainer, false); 8.3 Fragment使用onCreateView()中container參數(shù)代表該Fragment在Activity中的父控件;savedInstanceState提供了上一個(gè)實(shí)例的數(shù)據(jù)。inflate()方法的三個(gè)參數(shù):第一個(gè)是resource ID,指明了當(dāng)前的Fragment對應(yīng)的資源文件;第二個(gè)參數(shù)是父容器控件;第三個(gè)布爾值參數(shù)表明是否連接該布局和其父容器控件,在這里的情況設(shè)置為false,因?yàn)橄到y(tǒng)已經(jīng)插入了這個(gè)布局到父控件,設(shè)置為true將會產(chǎn)生多余的一個(gè)View Group。8.4 Fragment加入Activity當(dāng)Fragment被加入A

12、ctivity中時(shí),它會處在對應(yīng)的View Group中。Fragment有兩種加載方式: 一種是在Activity的layout中使用標(biāo)簽聲明;另一種方法是在代碼中把它加入到一個(gè)指定的ViewGroup中。另外,F(xiàn)ragment它可以并不是Activity布局中的任何一部分,它可以是一個(gè)不可見的部分。加載方式:通過Activity的布局文件將Fragment加入Activity在Activity的布局文件中,將Fragment作為一個(gè)子標(biāo)簽加入即可。如:8.4 Fragment加入Activity 8.4 Fragment加入Activity其中android:name屬性填上創(chuàng)建的frag

13、ment的完整類名。當(dāng)系統(tǒng)創(chuàng)建這個(gè)Activity的布局文件時(shí),系統(tǒng)會實(shí)例化每一個(gè)fragment,并且調(diào)用它們的onCreateView()方法,來獲得相應(yīng)fragment的布局,并將返回值插入fragment標(biāo)簽所在的地方。有三種方法為Fragment提供ID:android:id屬性:唯一的id。android:tag屬性:唯一的字符串。如果上面兩個(gè)都沒提供,系統(tǒng)使用容器view的ID。加載方式:通過編程的方式將Fragment加入到一個(gè)ViewGroup中。當(dāng)Activity處于Running狀態(tài)下的時(shí)候,可以在Activity的布局中動態(tài)地加入Fragment,只需要指定加入這個(gè)Fr

14、agment的父View Group即可。8.4 Fragment加入Activity首先,需要一個(gè)FragmentTransaction實(shí)例:FragmentManager fragmentManager = getFragmentManager();FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();如果導(dǎo)入的包為:import android.support.v4.app.FragmentManager;那么使用的是:FragmentManager fragmentManager = g

15、etSupportFragmentManager();之后,用add()方法加上Fragment的對象:ExampleFragment fragment = new ExampleFragment();fragmentTransaction.add(R.id.fragment_container, fragment);fragmentTmit();其中第一個(gè)參數(shù)是這個(gè)Fragment的容器,即父控件組。最后需要調(diào)用commit()方法使得FragmentTransaction實(shí)例的改變生效。8.5 使用Fragment舉例寫一個(gè)類繼承自Fragment類,并且寫好其布局文件(本例中是兩個(gè)Tex

16、tView),在Fragment類的onCreateView()方法中加入該布局。之后用兩種方法在Activity中加入這個(gè)Fragment:第一種是在Activity的布局文件中加入標(biāo)簽;第二種是在Activity的代碼中使用FragmentTransaction的add()方法加入fragment。(詳見教學(xué)資源光盤code文件下第8章SimpleFragmentDemo工程)8.5 使用Fragment舉例運(yùn)行結(jié)果如圖8-1所示。圖8-1 添加Fragment可以看到第二種方式加入fragment的時(shí)候,指定了父容器(一個(gè)線性布局)的id,其中已經(jīng)有一個(gè)Button 3,所以fragme

17、nt加在其后。本章小結(jié)Fragment通常用來作為一個(gè)Activity的用戶界面的一部分,并將它的Layout提供給Activity。為了給Fragment提供Layout,必須實(shí)現(xiàn)onCreateView()回調(diào)方法。此方法實(shí)現(xiàn)代碼必須返回一個(gè)能夠表示Fragment的Layout的View。可以把Fragment設(shè)計(jì)成可以在多個(gè)Activity中復(fù)用的模塊。也可以組合多個(gè)Fragment放在一個(gè)單獨(dú)的Activity中來創(chuàng)建一個(gè)多界面區(qū)域的UI,并可以在多個(gè)Activity里重用某一個(gè)Fragment。把Fragment想象成一個(gè)Activity的模塊化區(qū)域,有它自己的生命周期,接收屬于它的輸入事件,并且可以在Activity運(yùn)行期間

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論