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