您好,登錄后才能下訂單哦!
這篇文章主要介紹了Fragment的陷阱有哪些,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
以前做過的一個項目,Fragment嵌套高德地圖,當再次進入Fragment的時候,會出現奇怪的現象。嵌套的地圖會出現滑動不動的情況,起先還以為是高德的bug呢,經過一番研究,終確定這是一個坑。
先對Fragment做一個簡單的介紹,借用csdn上朋友寫的一段內容。
Android在3.0中引入了fragments的概念,主要目的是用在大屏幕設備上--例如平板電腦上,支持更加動態和靈活的UI設計。平板電腦的屏幕要比手機的大得多,有更多的空間來放更多的UI組件,并且這些組件之間會產生更多的交互。Fragment允許這樣的一種設計,而不需要你親自來管理 viewhierarchy的復雜變化。 通過將activity的布局分散到fragment中, 你可以在運行時修改activity的外觀,并在由activity管理的back stack中保存那些變化。
使用過Fragment的同學都知道,它的使用相當的簡單,基本上和Activity中一樣,就是生命周期函數稍稍多了點。今天不是介紹Fragment如何使用,而是介紹一個Fragment中的一個坑。現在相當多的APP都有以下三種設計風格。
一、底部TAB,一般3-5個,點擊某個TAB,上面頁面也隨之切換,如QQ、騰訊微博、新浪微博。早期的時候Android開發者們都會使用TabActivity去實現,但是TabActivity存在一些問題,也不符合Andoid的單窗口設計的原則,所以已經被廢棄,不推薦大家繼續使用。如有業務需求,請優先考慮使用Fragement。
二、頂部TAB,一般也是3-5個左右,相對于底部TAB風格,頂部TAB一般會引入ViewPager + Fragment的實現方式,這樣可以做到左右切換,如微信。
三、側邊TAB,也就是SlidingMenu + Fragment或者MenuDrawer + Fragment。這種風格自去年起,風靡的一發不可收拾,前段時間干貨分享講的一期就是這個,代碼也開源在了Github上,有興趣的朋友可以下載了解下。出門右轉,查看歷史消息《一個比較酷的項目界面分享,干貨十足》。
上述三種風格中使用到的Fragment,一般很容易會被大家忽略了一個問題。那就是當和Fragment關聯的view hierarchy正在被移除時,不會執行onDestroy()方法,而是會調用onDestroyView()。比如上述的風格二ViewPager + Fragment,默認情況下當ViewPager滑動到第三頁的時候,***頁的Fragment就會執行onDestroyView,當再次滑動到第二頁的時候,***頁的Fragment的onCreateView又會重新執行繪制頁面。伴隨而來的問題就是成員變量要重新賦值一次,辛苦耗時加載出來的頁面又要重新加載一次,這樣也就給內存增加了無意思的壓力,用戶體驗上也不大友好,尤其在有網絡請求等開銷時長比較長的情況下。
那有沒有上面解決辦法呢?答案是肯定的。onDestroyView的執行和Activity的onDestroy不一樣,不會銷毀當前的頁面,所以Fragment的所有成員變量的引用都還在。那就好辦了,我們在onCreateView的時候,先判斷該取到的數據是否為空,比如Fragment的根視圖rootView,網絡請求獲取到的數據等,如果不為空就不用再次執行。這樣一來也就避免了上述說的那些問題的存在了。
但是需要注意的一點就是,如果重用rootView的話,一定要記得在onDestroyView里面把rootView先給移除掉,因為已經有過父布局的View是不能再次添加到另一個新的父布局上面的。代碼如下
這樣也就解決了最前面我遇到的那個bug,由于每次進入都會創建一個MapView,很多地圖疊在了一起,所以就出現了"滑不動"的奇怪現象。
感謝你能夠認真閱讀完這篇文章,希望小編分享的“Fragment的陷阱有哪些”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。