首先加上一個連接,http://www.cnblogs.com/lianghui66/p/3607091.html在這篇文章中對其中的關係有詳細的講解,可是我以爲對於我遇到的問題仍是本身寫出整個解決流程是比較好的。html
首先要明白一個問題,ViewPager會緩存兩個頁面的信息,可是在使用instantiateItem()方法加載頁面時會加載當前Tab頁面左右兩邊的頁面,便是加載了3個頁面。在使用緩存時只緩存相鄰的2個。android
通常使用FragmentStatePagerAdapter時爲了更好的解決在調用notifyDataSetChanged()方法時能有刷新界面的效果。緩存
根據我本身在項目中的測試結果看,當調用notifyDataSetChanged()方法以後,大體流程爲:性能
在我我的看來若是對整個生命週期比較熟悉以後是能夠繼承至PagerAdapter,重寫其中的方法,那麼就能夠避免以後的程序出現各類其它的錯誤。固然在繼承FragmentStatePagerAdapter以後應該查看FragmentStatePagerAdapter類裏的方法,那麼就能夠避免重寫多餘的代碼,由於在這個類中好多方法都已通過處理,只有在肯定裏面的方法處理流程不是本身所須要的時候才須要重寫其方法,否則仍是用FragmentStatePagerAdapter類裏的方法比較好。好比:destroyItem()方法,自己已經對流程判斷和刪除操做作了很好的處理,在不符合本身的操做流程時再去重寫方法。instantiateItem()方法也已對加載Fragment作了很好的處理。測試
在我本身的程序裏使用了TabPageIndicator這個第三方類,其綁定了ViewPager,其中ViewPager全部的功能在這個類中都有。下面是對TabPageIndicator的簡單瞭解。優化
其屬於第三方ViewPagerIndicator包下的一個類,在此類中將ViewPager中的方法重寫了一些,其Tab展現更加靈活,具體用法網上不少。其中也有notifyDataSetChanged方法,在這個方法裏也會從新刷新界面,這時就要注意與ViewPager是否有衝突,由於二者既然綁定在一塊兒,那麼在加載時是會加載兩遍的,(這一點我以爲一點也很差,這或許是有好處就要犧牲掉一些性能吧。)ui
總結:htm
重寫getItemPosition方法時會更據其方法返回的參數肯定怎樣調用,若是是POSITION_UNCHANGED,那麼就代表其頁面已經加載不會再從新加載的,只有是POSITION_NONE纔會從新加載。blog
destroyItem會刪除當前頁面繼承
instantiteItem方法會加載左右兩邊的頁面,加上自身共是3個頁面。
在重寫方法時注意裏面的super這是會調到父類中的,注意在調到父類中的方法時其邏輯是不是本身想要的。
我的感悟:
網上的第三方包不少,用起來也很方便,可是在用的時候其邏輯結構每每是不清楚的,那麼在以後的代碼升級優化時每每會跟android系統的調用起衝突的,要想用時沒有後顧之憂,只有在徹底瞭解各類方法調用的生命週期時才能運用自如,不過到了那種程度的大神估計是不屑用第三方的包吧,可是像處於咱們這種迷糊階段的屁民每每就是蛋疼了,哈哈哈哈哈哈