fragment

Fragment使用總結(jié)
Android基礎(chǔ):Fragment,看這篇就夠了--懶加載

什么是fragment

Fragment(碎片)就是小型的Activity蕾额,它是在Android3.0時(shí)出現(xiàn)的拄丰。Fragment是表現(xiàn)Activity中UI的一個(gè)行為或者一部分。
Fragment必須被嵌入到一個(gè)activity中。它們的生命周期直接受其宿主activity的生命周期影響。

定義fragment

1浑测、 為Fragment定義一個(gè)布局
2、 定義類繼承Fragment
3歪玲、 重寫類中的onCreateView方法迁央,返回一個(gè)View對(duì)象作為當(dāng)前Fragment的布局。
fragment第一次繪制它的用戶界面的時(shí)候滥崩,系統(tǒng)會(huì)調(diào)用onCreateView()方法岖圈。為了繪制fragment的UI,此方法必須返回一個(gè)作為fragment布局的根的view钙皮。如果fragment不提供UI蜂科,可以返回null。

    public class Fragment1 extends Fragment {
        //初始化當(dāng)前Fragment的內(nèi)容onCreateView(必須重寫)
        @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {
            //將布轉(zhuǎn)成view
            // 參數(shù)1 要填充的布局資源
            View view = inflater.inflate(R.layout.fragment1, null);
            //返回view
            return view;
        }
        
    }

向下兼容

Fragment是在Android 3.0才推出的短条,若想在3.0的低版本下使用Fragment导匣,則需要執(zhí)行下面2步:
1、 把所有Fragment和FragmentManager改成support-v4包下的類
2茸时、 把Activity的繼承改為FragmentActivity(support-v4包下的)

將fragment添加到activity中

在布局中聲明

<fragment 
        android:id="@+id/fmt_title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:name="com.itheima.fragment.TitleFragment"
        />
注意:代碼中的四個(gè)屬性是必須的要給的贡定,“android:name”屬性:指定了在layout中實(shí)例化的Fragment類是哪個(gè)。

當(dāng)系統(tǒng)創(chuàng)建這個(gè)activity layout時(shí)可都,它實(shí)例化每一個(gè)在layout中指定的Fragment缓待,并調(diào)用它們的onCreateView()方法,來(lái)獲取每一個(gè)Fragment的layout渠牲,系統(tǒng)將從Fragment返回的View 直接插入到<fragment>元素所在的地方
每一個(gè)fragment都需要一個(gè)唯一的標(biāo)識(shí)旋炒,如果activity重啟,系統(tǒng)可以用來(lái)恢復(fù)Fragment签杈,并且可以用id來(lái)捕獲Fragment來(lái)處理事務(wù)瘫镇,
有3種方法來(lái)為一個(gè)fragment提供一個(gè)ID,具體如下所示:
1.為android:id屬性提供一個(gè)唯一ID;
2.為android:tag屬性提供一個(gè)唯一字符串;
3.如果以上2個(gè)你都沒(méi)有提供答姥,系統(tǒng)將使用容器view的ID;

動(dòng)態(tài)創(chuàng)建—切換fragment

要在activity中管理Fragment铣除,需要使用FragmentManager可以通過(guò)調(diào)用activity的getFragmentManager()取得它的實(shí)例。
replace

    public void news(View view) {
        //獲取Fragment管理器對(duì)象
        FragmentManager manager = getFragmentManager();
        //開(kāi)啟事務(wù)
        FragmentTransaction transaction = manager.beginTransaction();
        //將FrameLayout(viewgroup)控件替換成Fragment對(duì)象
        transaction.replace(R.id.frame, new NewsFragment());
        //提交事務(wù)
        transaction.commit();
    }

add+hide+show

FragmentManager mManager = getSupportFragmentManager();
FragmentTransaction mTransaction = mManager.beginTransaction();
if (from == -1 && !baseFragments.get(index).isAdded()) {
    mTransaction.add(R.id.fl_main, baseFragments.get(index), tags[index]).commit();
    mCurrentIndex = index;
} else {
    if (from != index) {
        if (!baseFragments.get(index).isAdded()) { // 先判斷是否被add過(guò)
            mTransaction.hide(baseFragments.get(from))
                    .add(R.id.fl_main, baseFragments.get(index), tags[index]).commit(); // 隱藏當(dāng)前的fragment踢涌,add下一個(gè)到Activity中
        } else {
            mTransaction.hide(baseFragments.get(from)).show(baseFragments.get(index)).commit(); // 隱藏當(dāng)前的fragment通孽,顯示下一個(gè)
        }
        mCurrentIndex = index;
    }

}

注意:
1.fragment的生命周期與activity綁定著,add多個(gè)fragment后睁壁,每當(dāng)activity的onstart執(zhí)行背苦,多個(gè)fragment的onstart也會(huì)執(zhí)行,執(zhí)行順序和add的順序相同潘明,并且(只有最上面的fragment可見(jiàn)哦)行剂,接著activity執(zhí)行onPause方法,多個(gè)fragment執(zhí)行onPause钳降。其他與activity生命周期一致的同上厚宰。
2.使用radiogroup+radiobutton組合來(lái)切換(已經(jīng)add過(guò)的fragment)fragment不執(zhí)行fragment的onstart方法

生命周期

Fragment的生命周期和activity生命周期很像,其生命周期方法如下所示。
? onAttach:綁定到activity
? onCreate:創(chuàng)建fragment
? onCreateView: 創(chuàng)建fragment的布局
? onActivityCreated: activity創(chuàng)建完成后
? onStart: 可見(jiàn)(暫且這么描述), 不可交互
? onResume: 可見(jiàn), 可交互
? onPause: 部分可見(jiàn), 不可交互
? onStop:不可見(jiàn)
? onDestroyView: 銷毀fragment的view對(duì)象
? onDestroy: fragment銷毀了
? onDetach: 從activity解綁了

生命周期注意

fragment間通信--標(biāo)記fragment

動(dòng)態(tài)添加fragment---replace—的第三個(gè)參數(shù)—設(shè)置tag

beginTransaction.replace(R.id.ll1, new Fragment1(), "f2");

通過(guò)getFragmentManager—找到tag標(biāo)記的fragment0—調(diào)方法

  //replace()方法最后一個(gè)參數(shù)是給Fragment設(shè)置的tag铲觉。
  Fragment2 fragment2 = (Fragment2) getActivity().getFragmentManager().findFragmentByTag("f2");
  //通過(guò)fragment對(duì)象, 調(diào)用方法修改
  fragment2.updateText("aaaaa");

增加
當(dāng)fragment被用戶可見(jiàn)時(shí)澈蝙,setUserVisibleHint()會(huì)調(diào)用且傳入true值,當(dāng)fragment不被用戶可見(jiàn)時(shí)撵幽,setUserVisibleHint()則得到false值

Android使用newInstance()實(shí)例化fragment&setArguments()傳遞參數(shù)
http://blog.csdn.net/czhpxl007/article/details/51277319
http://www.reibang.com/p/708f5983dd82

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末灯荧,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子盐杂,更是在濱河造成了極大的恐慌逗载,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,542評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件链烈,死亡現(xiàn)場(chǎng)離奇詭異厉斟,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)强衡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,822評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門擦秽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人食侮,你說(shuō)我怎么就攤上這事号涯。” “怎么了锯七?”我有些...
    開(kāi)封第一講書人閱讀 163,912評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵链快,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我眉尸,道長(zhǎng)域蜗,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 58,449評(píng)論 1 293
  • 正文 為了忘掉前任噪猾,我火速辦了婚禮霉祸,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘袱蜡。我一直安慰自己丝蹭,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,500評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布坪蚁。 她就那樣靜靜地躺著奔穿,像睡著了一般。 火紅的嫁衣襯著肌膚如雪敏晤。 梳的紋絲不亂的頭發(fā)上贱田,一...
    開(kāi)封第一講書人閱讀 51,370評(píng)論 1 302
  • 那天,我揣著相機(jī)與錄音嘴脾,去河邊找鬼男摧。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的耗拓。 我是一名探鬼主播拇颅,決...
    沈念sama閱讀 40,193評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼帆离!你這毒婦竟也來(lái)了蔬蕊?” 一聲冷哼從身側(cè)響起结澄,我...
    開(kāi)封第一講書人閱讀 39,074評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤哥谷,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后麻献,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體们妥,經(jīng)...
    沈念sama閱讀 45,505評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,722評(píng)論 3 335
  • 正文 我和宋清朗相戀三年勉吻,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了监婶。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,841評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡齿桃,死狀恐怖惑惶,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情短纵,我是刑警寧澤带污,帶...
    沈念sama閱讀 35,569評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站香到,受9級(jí)特大地震影響鱼冀,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜悠就,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,168評(píng)論 3 328
  • 文/蒙蒙 一千绪、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧梗脾,春花似錦荸型、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,783評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至宇立,卻和暖如春踪宠,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背妈嘹。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,918評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工柳琢, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,962評(píng)論 2 370
  • 正文 我出身青樓柬脸,卻偏偏與公主長(zhǎng)得像他去,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子倒堕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,781評(píng)論 2 354

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