Fragment為什么被稱為第五大組件
Fragment的生命周期
Fragment之間的通信
Fragment管理器:FragmentManager
1 蘑志、Fragment為什么被稱為第五大組件
使用次數(shù)是不輸于其他四大組件的搞旭,而且Fragment有自己的生命周期,比Activity更加節(jié)省內(nèi)存俐芯。
設(shè)計初衷:是為了在大屏手機(jī)或者pad上的顯示
為什么愿意使用:相對Activity節(jié)約內(nèi)存
特點(diǎn):不屬于四大組件,有自己的生命周期钉鸯,可以動態(tài)靈活的加載到Activity中吧史,必須依附與Activity不能獨(dú)立存在
2、Fragment加載到Activity的兩種方式
1)添加Fragment到Activity的布局文件當(dāng)中
2)動態(tài)在Activity中添加Fragment,步驟詳見
//步驟一:添加一個FragmentTransaction實(shí)例
FragmentManager fragmanager = getFragmentManager();
FragmentTransaction transaction = fragmanager.beginTransaction();
//步驟二:用add()方法加上Fragment的對象rightFragment
RightFragment rightFragment = new RightFragment();
transaction.add(R.id.right_container,rightFragment,”rightFragment”);
//步驟三:調(diào)用commit()方法使得FragmentTransaction實(shí)例的改變生效
transaction.commit();
3唠雕、FragmentPagerAdapter與FragmenetStatePagerAdpter區(qū)別
FragmentPagerAdapter適用于頁面較少
FragmenetStatePagerAdpter適用于頁面較多的情況
兩個類DestroyItem方法:
FragmentPagerAdapter:
transaction.detach(fragment),把fragment的UI跟Activity進(jìn)行脫離
FragmenetStatePagerAdpter:
transaction.remove(fragment),真正的釋放了Fragment的內(nèi)存
4贸营、Fragment生命周期
5、Fragment通信
1)在Fragment中調(diào)用Activity中的方法:首先getActivity()獲取Activity岩睁,然后調(diào)用Activity的方法钞脂;
2)在Activity中調(diào)用Fragment中的方法,接口回調(diào)
3)在Fragment中調(diào)用Fragment中的方法 findFragmentById捕儒;
先獲取Activity,然后Activity.findFragmentById獲取另外一個Fragment對象冰啃,之后進(jìn)行通信
ContentFragment cf = (ContentFragment) getActivity().getFragmentManager().findFragmentById(R.id.content_fg);
cf.showPro(name);
4)使用廣播
6、Fragment的replace\add\remove方法
其實(shí)是FragmentManager的方法
replace:把FrameLayout最上層的fragment【替換】成想要顯示的fragment
add:添加到Fragment的最上層【相當(dāng)于在FrameLayout中一層一層的疊View】
remove:從隊列中刪除【從頂上一層一層的往下拿】
補(bǔ)充:
回退棧:類似于Activity的肋层,我們也可以通過用Activity來維護(hù)一個Fragment的棧,如果將Fragment加入到回退棧中翎迁,那么每次按回退按鈕栋猖,就會看到上次的Fragment。
說到這里汪榔,有一個非常重要的概念蒲拉,就是add、remove和replace方法和回退棾针纾基本沒有關(guān)系雌团。
hide():隱藏已經(jīng)存在的Fragment,但是僅僅對已經(jīng)添加到父容器中的Fragment有關(guān)士聪,隱藏Fragment的View
show():顯示一個以前被隱藏的Fragment锦援,這僅僅對已經(jīng)添加到activity中的Fragment有關(guān),顯示Fragment的View
detach():Fragment的視圖被銷毀,但是它的狀態(tài)沒有被銷毀剥悟,還是被fragment manager
管理灵寺。
attach():Fragment的view重新加載到UI視圖中,并顯示区岗,也就是執(zhí)行onCreateView()→onActivityCreate()→onStart()→onResume()
通過介紹上面的幾個方法略板,我們應(yīng)該已經(jīng)明白了各個方法的用途,之所以使用add(),hide(),replace()這幾個方法不會出現(xiàn)閃動的問題慈缔,主要是因?yàn)閔ide()方法僅僅是隱藏了Fragment的View叮称,而沒有銷毀View,show()方法僅僅是顯示之前隱藏的View。
replace()是先remove(Fragment)瓤檐,然后add(Fragment)赂韵,這樣會導(dǎo)致fragment的重新創(chuàng)建。