項(xiàng)目中經(jīng)常會(huì)用到ViewPager配合Fragment進(jìn)行滑動(dòng)視圖的實(shí)現(xiàn),經(jīng)常配合FragmentPagerAdapter一起使用。
當(dāng)需要在Fragment(姑且叫做A)中嵌套另外一個(gè)Fragment(姑且叫做B)的時(shí)候,第一次啟動(dòng)這兩個(gè)Fragment沒有問題,但是當(dāng)從B切換回A時(shí),有時(shí)會(huì)遇到A中本該顯示的視圖沒有顯示,而是一片空白!而代碼本身是沒有任何錯(cuò)誤的。
會(huì)不會(huì)很郁悶?
Fragment放ViewPager,ViewPager里面是fragment。第一次進(jìn)入沒問題,再次進(jìn)入ViewPager的fragment時(shí)里面內(nèi)容就沒了,數(shù)據(jù)丟失。
上面是布局,其中菜單A和B是DrawerLayout中的兩個(gè)菜單,共用一個(gè)FragmentA,在每個(gè)菜單里面又有兩個(gè)菜單——菜單a和菜單b,a和b共用一個(gè)FragmentB。其實(shí)a和b也在FragmentA中,跟FragmentB合起來占用整個(gè)屏幕。
在給菜單a和b實(shí)現(xiàn)滑動(dòng)切換的時(shí)候用的是ViewPager,給ViewPager設(shè)置FragmentPagerAdapter,并在FragmentPagerAdapter.getItem()
里返回Fragment就可以讓菜單ab里面的內(nèi)容成現(xiàn)在FragmentB中。
可是問題就是從A切換到B沒有問題,再?gòu)腂切換到A時(shí),有的時(shí)候卻顯示不出A的視圖,再切換到B也是這樣。
原因是:子fragment用父fragment的FragmentManager了,然后不會(huì)出來內(nèi)容。
解決方法:在初始化FragmentPagerAdapter的時(shí)候不要傳入getFragmentManager(),
而應(yīng)該傳入getChildFragmentManager()這個(gè)方法。即:把
MyRentInFragmentPagerAdapter adapter = new MyRentInFragmentPagerAdapter(getFragmentManager());
換成
MyRentInFragmentPagerAdapter adapter = new MyRentInFragmentPagerAdapter(getChildFragmentManager());
在這個(gè)項(xiàng)目中又遇見了一個(gè)問題,F(xiàn)ragment跟FragmentManager的包導(dǎo)的是android.app.Fragment的,這樣就沒有getChildFragmentManager()這個(gè)方法了,只有android.support.v4.app.Fragment這個(gè)包才有,
所以從一開始只要用到Fragment跟FragmentManager的時(shí)候就用android.support.v4.app.Fragment這個(gè)包吧!