1.場(chǎng)景
底部導(dǎo)航的頁(yè)面切換一般是用幾個(gè)Fragment實(shí)現(xiàn)滑動(dòng)點(diǎn)擊切換的胆敞,那么在其中一個(gè)Fragment中需要實(shí)現(xiàn)頂部選項(xiàng)卡切換(舉個(gè)栗子:網(wǎng)易新聞客戶(hù)端的主頁(yè))斩熊,這時(shí)候就需要在一個(gè)Fragment中嵌套Fragment來(lái)實(shí)現(xiàn)了辣垒。**以下外層的Fragment稱(chēng)為 "Fragment" 南吮,里層的Fragment成為 "子Fragment" **
2.問(wèn)題
但是在實(shí)現(xiàn)過(guò)程中經(jīng)常會(huì)出現(xiàn) 子Fragment 無(wú)法顯示的問(wèn)題蜜猾。
3.解決方法
- 檢查在 Fragment 給ViewPager設(shè)置Adapter時(shí)辱姨,傳入Adapter的參數(shù)應(yīng)該為getChildFragmentManager(),而不是getFragmentManager()柿菩,代碼清單如下:
mAdapter = new MyPagerAdapter(getFragmentManager());
改為:
mAdapter = new MyPagerAdapter(getChildFragmentManager());
- 如果此時(shí)還沒(méi)有解決問(wèn)題,需要把你的FragmentPagerAdapter改為FragmentStatePagerAdapter雨涛。
兩者區(qū)別如下:
FragmentPagerAdapter 繼承自 PagerAdapter枢舶。相比通用的 PagerAdapter,該類(lèi)更專(zhuān)注于每一頁(yè)均為 Fragment 的情況替久。如文檔所述祟辟,該類(lèi)內(nèi)的每一個(gè)生成的 Fragment 都將保存在內(nèi)存之中,因此適用于那些相對(duì)靜態(tài)的頁(yè)侣肄,數(shù)量也比較少的那種旧困;如果需要處理有很多頁(yè),并且數(shù)據(jù)動(dòng)態(tài)性較大稼锅、占用內(nèi)存較多的情況吼具,應(yīng)該使用FragmentStatePagerAdapter。
這樣就可以正確顯示了矩距。