Android中Fragment嵌套Fragment,切換Fragment時不顯示視圖的原因及解決方法

項目中經常會用到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這個包吧!

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,242評論 25 708
  • 引言:這篇文章,大概分析下Fragment的生命周期、實際應用方法以及使用Fragment時需要注意的地方,算是F...
    androidjp閱讀 12,961評論 10 104
  • 高調奢華有內涵的東西沒有不讓人愛的,但是有些時候,那種低調并且又能勾起你嘴角微笑之漣漪的,就是簡簡單單帶來的不可復...
    植尚淇閱讀 222評論 0 3
  • 文本處理sed 一:簡介 ? Stream EDitor, 行編輯器首先對于一個文本文件來說,它是由至上而下的一行...
    芷_念閱讀 370評論 0 1
  • 早睡早起323天100篇時間管理系統文章第12篇 休息了兩天沒有更新文章,今天騰哥直接上干貨。給大家談談我克服拖延...
    系統思維自我管理訓練營閱讀 1,559評論 10 45