Android中Adapter的getView方法复用view机制

原文地址http://blog.youkuaiyun.com/lovehong0306/article/details/7498025


近来回答了一位朋友关于Adapter中getView()方法复用view机制的问题,想到自己也曾对这个问题迷茫了许久,相信还有不少初学者对这个问题很是头疼吧。

鉴于网上针对这个问题的讲解不多,我就举个简单的例子来说一说,尽量做到详细,希望对新人能有所帮助。


相信大家对线程池或者数据库连接池都比较熟悉

就拿ListView来说吧,它也有这么一个东西,我们暂且称它——view池

当然里边存的就是一些view

view池有一个最大数量限制,为了方便说明给它取个名字叫maxNum,

maxNum的值就是设备所能显示的最大item数目

比如当你进入ListView页面时,刚好显示5个item,那么maxNum的值就是6

什么?为什么是6而不是5呢?

别急,当你向下滑动ListView要显示下边的item时,上边的item也要向上滑动对不对

这样就有可能第一个item已经有一半滑出了屏幕,而最下边一个item还有一半没有进入屏幕

但这已经是显示了6个item了,

so,明白maxNum为什么是6了吧

至于为什么要这么做就不用我说了吧


继续往上滑,第一个item已经完全从屏幕消失了,

去哪了呢?销毁了?

没有,还记得view池吗?对,放到view池里去了

此时第6个item也已经完全显示了

继续往上滑,上边还是重复前边的步骤

现在来说说下边

首先要去view池里查询现在已经创建的item数目是否达到了maxNum

如果没有,继续创建新item view

如果已经是最大数目了,那么就去view池里去拿闲置的item view(这时view池里边肯定有闲置view的 不明白的再看一遍文章)

这个被拿过来的view就是传到Adapter中getView()方法中的参数 convertView

如此循环,就做到了view的复用


至于怎么处置这个convertView,那就是你的事了

你明白了吗?


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值