Android開發中,Fragment巢狀Fragments遇到的問題
阿新 • • 發佈:2018-12-11
Fragment,簡稱碎片,是Android 3.0(API11)提出的,為了相容低版本,support-v4庫中也開發了一套Fragment API,最低相容Android 1.6。
- Fragment是依賴於Activity的,不能獨立存在的。
- 一個Activity裡可以有多個Fragment。
- 一個Fragment可以被多個Activity重用。
- Fragment有自己的生命週期,並能接收輸入事件。
- 我們能在Activity執行時動態地新增或刪除Fragment。
工作過程中,Fragment
的使用也大大提高了我們的效率,通過Activity
Fragment
可以很容易的實現大多數app主介面的搭建。通常的做法都是通過getSupportFragmentManager()
來獲取Fragment的管理者物件FragmentManager
來進行Fragment的新增和移除的一些操作。但有時候也會有一些特殊的需求,比如上圖中所示:主介面由
Activity
巢狀Fragment
搭建,在子Fragment
中又嵌套了兩個子Fragment
。這就需要我們做一些特殊的處理了。當然你可以使用getSupportFragmentManager()
來繼續管理子Fragment
裡的Fragment
碎片,但是會出現頁面衝突的現象,這種是顯然不允許的。這時候就要引入getChildFragmentManager()
getChildFragmentManager()
來管理Fragment
才能達到我們想要的效果。這是因為第一級的Fragment巢狀在宿主Activity
,getFragmentManager()
返回的是Activity
的管理者物件,在Fragment中再巢狀Fragment
,getFragmentManager()
返回的是把自己加進來的管理者物件,也就是Activity
的管理者物件,這顯然是不對的。它需要的是本級的管理者物件,這就需要使用getChildFragmentManager()
來進行管理了。希望可以幫到你們。