android ViewPager之PagerAdapter中View的重用
在写PagerAdapter的时候,需要重写instantiateItem(ViewGroupcontainer ,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代替。效果一样的。
大家都来看看啊
页:
[1]