关于ViewPager的适配器之——pagerAdapter加载缓存页面的机制
ViewPager有很多的適配器,如pagerAdapter,FragmentPagerAdapter等,
今天我想重點談的是關于pagerAdapter加載緩存頁面的機制的問題。
首先,使用pagerAdapter一般需要重寫它的四個未實現的方法分別是:
?
?
1.? getCount(){} //得到總數
?
?
?
?2.?? ?//實例化頁面,??相當于BaseAdapter等適配器中的 getView()方法 返回想要顯示的對象(內容)
???? //?不同之處是:這里需要把這些對象(內容)一一添加到adapter之中
? instantiateItem(VIewGroup container,int position);//container? 是ViewPager本身
? { ????//如下:??
?ImageView imageView = imageViews.get(position);
?container.addView(imageView);//添加到Viewpager中
?return imageVIew;
??? }???
?
?3.? //比較view和object是否同一個實例
??? isViewFromObject(View view,Object object)//View 當前的對象(頁面),object 上面的這個方法 instantiateItem()返回的結果
???//如下:????????????????????????????????
???? {
?if(view == object){
??return true;
???????????? }else{
??return false;
???????????? }
?????? //return view == object;一句話搞定
???? }????????
?
?
??????????????????????????
4.??? //釋放資源
??? destroyItem(ViewGroup container,int position Object object)
?? {?????//container? ViewPager本身
??? ????//object?? 要釋放的頁面
?????//position? 要釋放的位置
??????? //super.destroyItem(container, position, object);//注意這一句要注銷了
????? container.removeView(object);
??? }
?
?
?
?????注意: PagerAdapter一創建出來的時候只會先加載兩個頁面(一個顯示給我們看 一個是先緩存著,假設為頁面A,B) ,
??????????????????? 接著我們手指向左滑動的時候 便會顯示上一步中已經實例化好的頁面 ,
?????????????????? 然后同時再實例化出一個新的頁面(這個新的頁面先緩存著,以便即將到來的顯示,假設為頁面C),
??????????????????? 這個時候便緩存著三個頁面了(分別是頁面A,,正在顯示的頁面B,即將顯示的頁面C)
???????????????????以此類推, 再往左滑動 便又顯示上一步中已經實例化好的頁面 然后會再實例化好下一個新的頁面 同時銷毀原先第一個頁面
????(即PagerAdapter中最多只會緩存三個頁面 ,多出來的頁面會通過銷毀前面的頁面來實現,
??????????????????????????? 我們在看到一個畫面的時候 它已經為我們實例化好下一個頁面了(先為我們準備著))
??????????????? 所以? 在PagerAdapter 中
?????????????????????? 實例化的方法instantiateItem()中的position會比其他的position多1
??
?????
?
?
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
?
轉載于:https://www.cnblogs.com/chengxuxia/p/6648432.html
總結
以上是生活随笔為你收集整理的关于ViewPager的适配器之——pagerAdapter加载缓存页面的机制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: docker安装tesseract
- 下一篇: 延迟加载与序列化