1. 程式人生 > >關於viewpager與fragment需要重新整理資料的bug,解決辦法。

關於viewpager與fragment需要重新整理資料的bug,解決辦法。

       首先要解析兩個問題,第一:在 Fragment 中,使用 getArguments() 來取得引數。這是常用的引數傳遞方式。這種資料傳遞方式只可能用一次,在 Fragment 被新增到 FragmentManager 後,所以會造成,就算我們把fragment釋放掉,在viewpager裡面,fragment獲取到的bundle,仍然是第一次儲存的資料,因此引數傳遞,在繼承的 Fragment 子類中,新增幾個 setter,getter然後通過這些 setter 將資料傳遞過去。同時提醒一下這些 setter 方法中不要操作那些 View,這些 View 只有在 onCreateView() 事件後才可以操作。第二:
FragmentPagerAdapter 繼承自 PagerAdapter該類內的每一個生成的 Fragment 都將儲存在記憶體之中,因此適用於那些相對靜態的頁,數量也比較少的那種;FragmentStatePagerAdapter 繼承自 PagerAdapter, 當頁面離開視線後,就會被消除,釋放其資源;而在頁面需要顯示時,生成新的頁面(就像 ListView 的實現一樣)。這麼實現的好處就是當擁有大量的頁面時,不必在記憶體中佔用大量的記憶體。所以不用 FragmentPagerAdapter,而改用 FragmentStatePagerAdapter,並且過載 getItemPosition() 並返回 POSITION_NONE,以觸發銷燬物件以及重建物件。