解決fragment與viewpager一起使用時fragment中的listview資料出現重複
阿新 • • 發佈:2019-02-02
activity中需要顯示一個切換頁顯示3個不同的檢視資料,這裡需要使用viewpager+fragment實現切換。在fragment中需要在onstart或者onresume中初始化載入資料。但是viewpager在切換fragment時會呼叫下一個fragment的多個回撥,比如:
在載入Tab-A時會例項化Tab-B中fragment,依次呼叫:onAttach、onCreate、onCreateView、onActivityCreated、onStart和onResume。同樣切換到Tab-B時也會初始化Tab-C中的fragment。但是fragment中的資料(如讀取的伺服器資料)沒有相應清除,導致重複載入資料。
解決方式:給pager設定一個快取,
mViewPager.setOffscreenPageLimit(3);
這樣在切換fragment時就不會重複載入資料。
tab在切換時沒用清除fragment中儲存的資料可以看出fragment沒有被重新建立,但是依次重新呼叫了以上的回撥方法,給pagerview設定快取量後在tab切換時沒有重新呼叫以上的回撥函式。
ps:我們在使用viewpager時會定義一個介面卡adapter,其中例項化了一個fragment列表,所以在tab切換時fragment都是已經例項化好的,所以在切換標籤頁時是不會重新例項化fragment物件的,因而在fragment中定義的成員變數是不會被重置的。所以為列表初始化資料需要注意這個問題