码迷,mamicode.com
首页 > 移动开发 > 详细

android ViewPager之PagerAdapter中View的重用

时间:2015-08-21 18:55:33      阅读:209      评论:0      收藏:0      [点我收藏+]

标签:

在写PagerAdapter的时候,需要重写instantiateItem(ViewGroup  container ,int position)

 
此方法中,将需要加载的View,添加到container中。

PagerAdapter不能直接使用像ListView那样的ViewHolder,来实现View的复用。
 
所以,如果每次加载,都要新建一个View出来就会很占用内存。
 
如果你的View都是一样的,比如都是ImageView,那么就可以使用一个List将回收的View存起来
 
再次加载的时候,优先从回收List中加载,不必再去new.
 
大致的逻辑如下:
      private LinkedList < View> recycledViews = new LinkedList <View > ();
 
public Object instantiateItem( ViewGroup container , int position ) {
               // TODO Auto-generated method stub
               CustomImage imageView = null;
               if ( debug )
               Log. e (TAG , "PagerAdapter : instantiateItem"+ "position is "+ String .valueOf (position )+ "ChildCount is:" +container .getChildCount ());
               if ( recycledViews != null && recycledViews. size() >0 ) {
                   imageView = ( CustomImage) recycledViews .getFirst ();
                   recycledViews .removeFirst ();
                   
               } else {
                   imageView = new CustomImage (mContext );
               }
               imageView .setImageResource (resids .get (position ));
               container .addView (imageView );
               return imageView;
           }
 
           @Override
           public void destroyItem( ViewGroup container , int position , Object object ) {
               // TODO Auto-generated method stub
               if ( debug )
               Log. e (TAG , "PagerAdapter : destroyItem"+ "position is"+ String .valueOf (position )+ "ChildCount is:" +container .getChildCount ());
               ((ViewGroup ) container ). removeView ((View ) object );
               if ( object != null) {
                   recycledViews .addLast ((View )object );
               }
           }
 
上面的CustomView是我自定义的一个ImageView,可以用任意的View代替。效果一样的。

android ViewPager之PagerAdapter中View的重用

标签:

原文地址:http://www.cnblogs.com/Theone2014/p/4748613.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!