博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
android ViewPager之PagerAdapter中View的重用
阅读量:5240 次
发布时间:2019-06-14

本文共 1500 字,大约阅读时间需要 5 分钟。

在写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代替。效果一样的。

转载于:https://www.cnblogs.com/Theone2014/p/4748613.html

你可能感兴趣的文章
Android控件之GridView探究
查看>>
在工程中要加入新的错误弹出方法
查看>>
PS 滤镜— — sparkle 效果
查看>>
snmpwalk命令常用方法总结
查看>>
网站产品设计
查看>>
代理ARP
查看>>
go 学习笔记(4) ---项目结构
查看>>
java中静态代码块的用法 static用法详解
查看>>
Java线程面试题
查看>>
Paper Reading: Relation Networks for Object Detection
查看>>
Java IO流学习总结
查看>>
day22 01 初识面向对象----简单的人狗大战小游戏
查看>>
mybatis源代码分析:深入了解mybatis延迟加载机制
查看>>
Flask三剑客
查看>>
Hibernate-缓存
查看>>
【BZOJ4516】生成魔咒(后缀自动机)
查看>>
提高PHP性能的10条建议
查看>>
svn“Previous operation has not finished; run 'cleanup' if it was interrupted“报错的解决方法...
查看>>
熟用TableView
查看>>
Java大数——a^b + b^a
查看>>