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

本文详细解释了ListView中的view复用机制,通过建立view池来优化资源利用,避免频繁创建和销毁view,从而提高应用性能。通过实例演示,深入浅出地阐述了view池的概念、原理及其实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://blog.csdn.net/lovehong0306


近来回答了一位朋友关于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,那就是你的事了

你明白了吗?


http://blog.csdn.net/lovehong0306

在Internet飞速发展的今天,互联网成为人们快速获取、发布和传递信息的重要渠道,它在人们政治、经济、生活等各个方面发挥着重要的作用。Internet上发布信息主要是通过网站来实现的,获取信息也是要在Internet“海洋”中按照一定的检索方式将所需要的信息从网站上下载下来。因此网上购物系统应运而生,网上购物弥补了传统购物的一些局限性,成为传统购物的补充。 通过网上购物,无论你在哪里都可以轻松地买到心爱的物品,只要那里有一台接入了Internet的电脑,通过网上购物可以很清楚的了解各个商品的信息,从而对它们进行比较,最后买到自己称心的物品。对于管理人员来说,利用购物系统能轻松地管理大量的商品,而且可以通过系统查看各种商品的销售状况,通过各种数据能够及时地知道那种商品正在热卖,而那些商品属于冷门地,从而在运营上进行调整,更好地管理好商店。 我设计的是网上购物系统数据库部分,存储销售商需要卖出的商品信息、用户的所有信息。方便用户根据自己的喜好,浏览自己喜欢的东西。若要想购买商品,就必须通过注册成为会员才能进行购买,登陆后就可以购物了。商店的各种商品都进行了详细地分类,可以轻松地找到想要的商品,同时查找系统能很容易地找到相关的商品。同时买到自己喜欢的东西后就可以去结算,通过下订单你可以填写自己的相关信息,而完成购物的流程。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值