TabLayout + ViewPager +Fragment 實現頁面的動態重新整理

Dick_Xiong發表於2018-07-07

踩坑記錄:為了實現資料的返回重新整理fragment,每次重新newInstance的時候傳入了值,但是在initData(即獲取Bundle傳遞引數)的時候資料就是空的,這個問題糾結了一天。日誌出每次fragment的實體地址,是變化的,既然fragment 沒有做更新,可能就出在記憶體上面,然後嘗試在fragment 裡面增加個方法,將我需要的資料傳入進去,但是又進入了一個新的坑,fragment中的view獲取的都是空值,這個因為viewpager中的fragment已經被清除了,每次切換fragment,就會重新newInstace。折騰了好久,最後嘗試去清空viewpager的view,重新載入記憶體資料,這個原因是因為 viewpager為了滑動流暢性,fragment都是放在記憶體中去的。

在stackOverFlow看到這篇文章:https://stackoverflow.com/questions/10396321/remove-fragment-page-from-viewpager-in-android

The ViewPager doesn't remove your fragments with the code above because it loads several views (or fragments in your case) into memory. In addition to the visible view, it also loads the view to either side of the visible one. This provides the smooth scrolling from view to view that makes the ViewPager so cool.

To achieve the effect you want, you need to do a couple of things.

依據大神的指引,找到了問題的根源,也解決了現在的問題

首先要移除viewpager的view,然後將FragmentPagerAdapter替換成FragmentStatePagerAdapter,最後重寫adapter中的getitemPosition的方法,返回 PagerAdapter.POSITION_NONE ,其他的邏輯都是一樣的。忘了說一句,tablayout 在addtab的時候需要將已經add過的tab清除掉。

附上程式碼片段:

 



相關文章