在写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的重用的更多相关文章

  1. 有关ViewPager的使用及解决Android下ViewPager和PagerAdapter中调用notifyDataSetChanged失效的问题

    ViewPager是android-support-v4.jar包中的一个系统控件,继承自ViewGroup,专门用以实现左右滑动切换View的效果,使用时需要首先在Project->prope ...

  2. Android Tab -- 使用ViewPager、PagerAdapter来实现

    原文地址:http://blog.csdn.net/crazy1235/article/details/42678877 效果:滑动切换,自动切换. 代码:https://github.com/ldb ...

  3. ViewPager的Adapter中视图重用

    ViewPager的PagerAdapter不像ListView/GridView的BaseAdapter,它是没有内部视图重用机制的,也就是说我先inflate出来一个,然后调用destroyIte ...

  4. [Android] Android ViewPager 中加载 Fragment的两种方式 方式(一)

    Android ViewPager 中加载 Fragmenet的两种方式 一.当fragment里面的内容较少时,直接 使用fragment xml布局文件填充 文件总数 布局文件:view_one. ...

  5. Android——ViewPager滑动背景渐变(自定义view,ViewPager)

    效果: ActivityBackgroundImage,java(自定义视图) package com.example.chenshuai.test322; import android.conten ...

  6. [Android] Android ViewPager 中加载 Fragment的两种方式 方式(二)

    接上文: https://www.cnblogs.com/wukong1688/p/10693338.html Android ViewPager 中加载 Fragmenet的两种方式 方式(一) 二 ...

  7. Android中View类OnClickListener和DialogInterface类OnClickListener冲突解决办法

    Android中View类OnClickListener和DialogInterface类OnClickListener冲突解决办法 如下面所示,同时导入这两个,会提示其中一个与另一个产生冲突. 1i ...

  8. Android中View绘制流程以及invalidate()等相关方法分析

    [原文]http://blog.csdn.net/qinjuning 整个View树的绘图流程是在ViewRoot.java类的performTraversals()函数展开的,该函数做的执行过程可简 ...

  9. Android中View的绘制过程 onMeasure方法简述 附有自定义View例子

    Android中View的绘制过程 onMeasure方法简述 附有自定义View例子 Android中View的绘制过程 当Activity获得焦点时,它将被要求绘制自己的布局,Android fr ...

随机推荐

  1. MYSQL数据库封装类

    <?phpclass DBDA{    public $host="localhost";    public $uid="root";    publi ...

  2. Daily Scrum NO.4

    工作概况 符美潇(PM) 昨日完成的工作 1.Daily Scrum.日常会议及日常工作的分配和查收. 2.解决并录入了一个严重的过滤器BUG,该BUG会导致获取子链接的严重异常. 3.在TFS上进行 ...

  3. navicat连接mysql报10061错

    可能原因:mysql服务未启动 解决办法:进入到计算机管理,找到服务,然后找到mysql服务,并启动该服务

  4. 剑指offer:二叉搜索树的后续遍历序列

    题目描述: 输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果.如果是则输出Yes,否则输出No.假设输入的数组的任意两个数字都互不相同. 解题思路: 根据二叉搜索的性质,后序遍历是先搜索 ...

  5. JS基础(一)异常错误

    EvalError(运算错误): raised when an error occurs executing code in eval() RangeError(范围错误): raised when ...

  6. Docker(二十六)-Docker Compose编排容器

    1. 前言 Docker Compose 是 Docker 容器进行编排的工具,定义和运行多容器的应用,可以一条命令启动多个容器. 使用Compose 基本上分为三步: Dockerfile 定义应用 ...

  7. ThreadLocal变量

    什么是ThreadLocal变量?ThreadLocal,很多地方叫做线程本地变量,也有些地方叫做线程本地存储,其实意思差不多.可能很多朋友都知道ThreadLocal为变量在每个线程中都创建了一个副 ...

  8. idea中 mybatis的debug文件需要放在src的目录下 不能加多余的路径

  9. MT【111】画图估计

    评:此类方程是超越方程,一般情况下无法解出具体的解,常见手段:1.画图  2.猜根.此处可以取特殊值a=2.5,b=3.5,容易知道此时$x=2.5\in(2,3)$

  10. 以 BZOJ 2002 为例学习有根树LCT(Link-Cut Tree)

    以BZOJ 2002 弹飞绵羊为例学习有根树LCT(Link-Cut Tree) 注:本文非常简单,只涉及有根树LCT,对于无根树,LCT还有几个本文没有提到的操作,以后慢慢更新 =v= 知识储备 [ ...