ViewPager中切換介面Fragment被銷毀的問題

來源:互聯網
上載者:User

ViewPager中切換介面Fragment被銷毀的問題

ViewPager中切換介面Fragment被銷毀的問題分析

使用ViewPager+Fragment實現介面切換,當介面數量大於3時,出現二次滑動後資料消失的情況,下面由Fragment生命週期進行分析

簡單解析:

使用pager=3進行測試,當介面由2切換到1的時候,3介面對應的Fragment實際上走了如下流程:

1 -->onPause

2 -->onStop

3 -->onDestroyView

再由1切換回2或者3時,3介面對應的Fragment的執行流程:

1 -->onCreateView

2 -->onStart

3 -->onResume

介面3對應的Fragment被銷毀並重新建立。

ViewPager的預設載入方式是緩衝當前介面前後相鄰的兩個介面,即最多共緩衝包括當前介面在內的三個介面資訊。當滑動切換介面的時候,非相鄰介面資訊將被釋放。

介面2是當前介面,介面1和3是緩衝介面,當切換到1時,介面2仍緩衝,介面3被銷毀釋放,於是便有了onDestroyView的調用。

由1切換到2或3時,介面3又被重新建立,於是走了onCreateView流程。

解決方案:

方案一:設定ViewPager的緩衝介面數

此方案適用於介面數較少的情況,避免緩衝介面太多導致記憶體吃緊。

mPager .setOffscreenPageLimit(2);

參數:int limit — 緩衝當前介面每一側的介面數

以上述為例,當前介面為1,limit = 2,表示緩衝2、3兩個介面。如此便避免了介面3被銷毀。

方案二:儲存狀態並恢複

此方案適用於可用介面資訊可由狀態儲存和恢複實現的情況。

在onDestroyView方法內儲存相關資訊,在onCreateView方法內恢複資訊設定。

方案三(推薦):複用Fragment的RootView

https://www.bkjia.com/topicnews.aspx?tid=11

本文永久更新連結地址:https://www.bkjia.com/Linux/2018-02/151005.htm

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.