Andrlid ListView原理理解与应用

本文详细介绍了Android中ListView的工作原理及如何高效地加载图片。针对ListView中图片重复显示的问题,提出了有效的解决方案,确保图片正确加载并提高应用性能。

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

1.      从API中读取图片(张数不定)

1)  ListView显示原理

ListView底层主要的方法是getCount()、getView();

2)  ListView绘制

当ListView绘制时,首先调用的时getCount()方法,来返回的时ListView中item的长度,如果getCount()返回的时0,则一行也不显示,如果getCount()返回的是1,则就显示一行;原理上是有几个item,就显示几行,而每一个item都是对应的是一个view,如果存在着成千上万个item,那么此时要创建成千上万的view,也就是要调用成千上万次的getView()方法,显然是不可能的;因此,Android提供了Recycler构件,将没有正在显示的item放进RecycleBin,然后在显示新视图时从RecycleBin中复用这个 View。假设屏幕最多能看到11个item,那么当第1个item滚出屏幕,这个item的View进入RecycleBin中,第12个要出现前,通过 getView从回收站(RecycleBin)中重用这个View,然后设置数据,而不必重新创建一个View。

3)  从ListView原理中设置ListView中图片的显示

当一个正在显示的item放到Recycler中时,此时说明的是该item不是null的,也就是它是存在着数据的,那么,此时我们要将一个新的item显示出来时,它是通过Recycler构件中的item来显示,也就是说的是,我们是通过Recycler构件中的item来创建一个新的item,此时注意的是,Recycler构件中的item(已经不再手机屏幕上显示),已经被初始化,也就是说的是,该item是存在着数据的,当我们添加数据(如图片),如果我们快速加载图片数据的话,如果不对Recycler中的item中存在的数据进行清理的话,当我们快速加载数据的时,就会出现图片重叠,最明显的现象就是有的item视图是通过Recycler中的item来创建出来的,并携带了Recycler中item的image图片资源,产生这种原因,就是因为在加载服务器中的图片资源在加载时,是需要时间的,当我们在快速加载数据的时候,由于我们没有对Recycler中的item进行处理,所以就将其赋值给新的item了。

4)  解决在ListView中图片重复的问题

5)   } else if (topics.getPicNUms() == 3) {
    ivTopicPic1.visible($.SN_UI_VISIBLE);
    ivTopicPic2.visible($.SN_UI_VISIBLE);
    ivTopicPic3.visible($.SN_UI_VISIBLE);
   setIvTopicPic1(topics.getPicturesUrl1());
   setIvTopicPic2(topics.getPicturesUrl2());
   setIvTopicPic3(topics.getPicturesUrl3());
} else{
    ivTopicPic1.visible($.SN_UI_NONE);
    ivTopicPic2.visible($.SN_UI_NONE);
    ivTopicPic3.visible($.SN_UI_NONE);
}

解决方案很明显,当需要显示图片时,就将ImageView显示出来,当item中没有显示图片时,就将ImageView进行隐藏起来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值