Android中的Fragment總結(jié)

簡(jiǎn)介

Fragment(譯:碎片)出現(xiàn)于Android 3.0以后,是為了代替TabActivity详炬,讓界面可以在平板上更好地展示寞奸,4.0之后后者被棄用。

Paste_Image.png

不能單獨(dú)存在隐岛,必須被嵌入在Activity瓷翻,一個(gè)Activity可以 嵌入多個(gè)Fragment。
具有單獨(dú)的生命周期妒牙,且生命周期和Activity相似;但其周期依賴于所屬Activity的周期,隨著Activity的變化而創(chuàng)建或銷毀象浑。

如果Activity是暫停狀態(tài)琅豆,其中所有的Fragment都是暫停狀態(tài);
如果Activity是stopped狀態(tài)蚪拦,這個(gè)Activity中所有的Fragment都不能被啟動(dòng)冻押;
如果Activity被銷毀,那么它其中的所有Fragment都會(huì)被銷毀括袒。

當(dāng)Fragment被創(chuàng)建時(shí)稿茉,它被加入到所在Activity中的一個(gè)管理?xiàng)?back stack)中漓库,有了這個(gè)棧后,就可以反復(fù)操作棧中的Fragment渺蒿,這樣就可以在fragment級(jí)進(jìn)行返回鍵操作蘸嘶。

Fragment不一定非在activity前臺(tái)顯示,可以被隱藏在后臺(tái)運(yùn)行(當(dāng)然, 要隨著activity生命周期變化)训唱。

生命周期

Fragment生命周期包含11個(gè)方法:

Fragment生命周期

Fragment生命周期和Activity相似


Activity VS Fragment

每當(dāng)創(chuàng)建一個(gè)Fragment時(shí)赞庶,首先添加以下三個(gè)回調(diào)方法:
onCreate():系統(tǒng)在創(chuàng)建Fragment的時(shí)候調(diào)用這個(gè)方法,這里應(yīng)該初始化相關(guān)的組件澜薄,一些即便是被暫吞幔或者被停止時(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)會(huì)返回一個(gè)ListView,所以不用自己實(shí)現(xiàn)若债。

onPause():當(dāng)用戶離開Fragment時(shí)第一個(gè)調(diào)用這個(gè)方法拆融,需要提交一些變化,因?yàn)橛脩艉芸赡懿辉俜祷貋怼?/p>

將Fragment加載到Activity當(dāng)中有兩種方式:
方式一:添加Fragment到Activity的布局文件當(dāng)中
方式二:在Activity的代碼中動(dòng)態(tài)添加Fragment

第一種方式雖然簡(jiǎn)單但靈活性不夠傲须。添加Fragment到Activity的布局文件當(dāng)中,就等同于將Fragment及其視圖與activity的視圖綁定在一起趟脂,且在activity的生命周期過程中昔期,無法切換fragment視圖。
第二種方式比較復(fù)雜累澡,但也是唯一一種可以在運(yùn)行時(shí)控制fragment的方式(加載般贼、移除奥吩、替換)蕊梧。

Example:
切換到該Fragment
09-19 15:30:20.095: D/AppListFragment(7678): onAttach
09-19 15:30:20.095: D/AppListFragment(7678): onCreate
09-19 15:30:20.095: D/AppListFragment(7678): onCreateView
09-19 15:30:20.100: D/AppListFragment(7678): onActivityCreated
09-19 15:30:20.120: D/AppListFragment(7678): onStart
09-19 15:30:20.120: D/AppListFragment(7678): onResume

屏幕滅掉:
09-19 15:27:35.185: D/AppListFragment(7678): onPause
09-19 15:27:35.205: D/AppListFragment(7678): onSaveInstanceState
09-19 15:27:35.205: D/AppListFragment(7678): onStop

屏幕解鎖
09-19 15:33:13.240: D/AppListFragment(7678): onStart
09-19 15:33:13.275: D/AppListFragment(7678): onResume

切換到其他Fragment:
09-19 15:33:33.655: D/AppListFragment(7678): onPause
09-19 15:33:33.655: D/AppListFragment(7678): onStop
09-19 15:33:33.660: D/AppListFragment(7678): onDestroyView

切換回本身的Fragment:
09-19 15:33:55.820: D/AppListFragment(7678): onCreateView
09-19 15:33:55.825: D/AppListFragment(7678): onActivityCreated
09-19 15:33:55.825: D/AppListFragment(7678): onStart
09-19 15:33:55.825: D/AppListFragment(7678): onResume

回到桌面
09-19 15:34:26.590: D/AppListFragment(7678): onPause
09-19 15:34:26.880: D/AppListFragment(7678): onSaveInstanceState
09-19 15:34:26.880: D/AppListFragment(7678): onStop

回到應(yīng)用
09-19 15:36:51.940: D/AppListFragment(7678): onStart
09-19 15:36:51.940: D/AppListFragment(7678): onResume

退出應(yīng)用
09-19 15:37:03.020: D/AppListFragment(7678): onPause
09-19 15:37:03.155: D/AppListFragment(7678): onStop
09-19 15:37:03.155: D/AppListFragment(7678): onDestroyView
09-19 15:37:03.165: D/AppListFragment(7678): onDestroy
09-19 15:37:03.165: D/AppListFragment(7678): onDetach

Fragment的使用


在activity代碼中添加fragment端衰,點(diǎn)擊MainActivity中左側(cè)的按鈕甘改,彈出右側(cè)的Fragment。

MainActivity.java中按鈕的監(jiān)聽器部分的代碼如下:

button.setOnClickListener(

 new OnClickListener() { 

   @Override 
   public void onClick(View v) { 
    //步驟一:獲得activity中Fragment管理器
    FragmentManager fragmentManager =getFragmentManager(); 

    //步驟二:添加一個(gè)FragmentTransaction的實(shí)例
    FragmentTransaction transaction = fragmentManager.beginTransaction(); 

    //步驟三:用add()方法加上Fragment的對(duì)象rightFragment 
    RightFragment rightFragment = new RightFragment();
    transaction.add(R.id.right, rightFragment); 

    //步驟四:調(diào)用commit()方法使得FragmentTransaction實(shí)例的改變生效 
    transaction.commit(); 
   }
 }
);

下一章在介紹fragment的具體使用.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末名挥,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子榄融,更是在濱河造成了極大的恐慌救湖,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件力九,死亡現(xiàn)場(chǎng)離奇詭異跌前,居然都是意外死亡陡舅,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門灾炭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來颅眶,“玉大人涛酗,你說我怎么就攤上這事皱蹦【祢冢” “怎么了?”我有些...
    開封第一講書人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵辜妓,是天一觀的道長(zhǎng)忌怎。 經(jīng)常有香客問我榴啸,道長(zhǎng),這世上最難降的妖魔是什么鸥印? 我笑而不...
    開封第一講書人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任库说,我火速辦了婚禮,結(jié)果婚禮上骚揍,老公的妹妹穿的比我還像新娘啰挪。我一直安慰自己,他們只是感情好浑塞,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開白布酌壕。 她就那樣靜靜地躺著歇由,像睡著了一般。 火紅的嫁衣襯著肌膚如雪沦泌。 梳的紋絲不亂的頭發(fā)上谢谦,一...
    開封第一講書人閱讀 49,031評(píng)論 1 285
  • 那天萝衩,我揣著相機(jī)與錄音没咙,去河邊找鬼祭刚。 笑死,一個(gè)胖子當(dāng)著我的面吹牛涡驮,可吹牛的內(nèi)容都是我干的捉捅。 我是一名探鬼主播,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼寄月,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼陌凳!你這毒婦竟也來了内舟?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤充岛,失蹤者是張志新(化名)和其女友劉穎崔梗,沒想到半個(gè)月后垒在,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡谈为,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年伞鲫,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了签舞。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片柒瓣。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡吠架,死狀恐怖芙贫,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情诵肛,我是刑警寧澤屹培,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站怔檩,受9級(jí)特大地震影響褪秀,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜薛训,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一媒吗、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧乙埃,春花似錦闸英、人聲如沸介袜。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽遇伞。三九已至辙喂,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間鸠珠,已是汗流浹背巍耗。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留渐排,地道東北人炬太。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像驯耻,于是被迫代替她去往敵國(guó)和親亲族。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容