类网易新闻首页ListView---异步加载ListView图片

本文介绍如何解决ListView加载图片缓慢的问题,通过异步加载和缓存机制提升用户体验。

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

先来看效果:
刚开始加载时      
正在加载
加载完毕时:
加载基本完毕
                                                        

在项目里面使用ListView,并要求ListView的条目中有图片显示,而且这个图片是通过网络动态获取的。

这时候,会发现ListView加载很慢,半天才显示出来,影响了用户的体验。

这是因为,使用了当前线程(绘制ui的线程)去下载图片。应该另外开辟线程异步下载图片。

其中,数据来源于assets/list.xml,我通过xstream将它映射为NewsBean的列表。

这部分代码见com.easymorse.list.ListViewDemoActivity的:

  1. private List getList() {
  2. try {
  3. XStream xStream = new XStream();
  4. xStream.alias(“item”, NewsBean.class);
  5. return (List) xStream.fromXML(this.getAssets().open(
  6. “list.xml”));
复制代码

有关xstream的代码,还可以参见android下通过xstream解析xml格式信息

项目有两个布局文件,main.xml和news_row.xml文件。前者是Activity的布局文件,后者是列表每一行的布局文件。

这里需要注意的是,ListView在main.xml布局文件中的id,需要写成:

  1. android:id=”@android:id/list”
复制代码

否则会报错。而且,Activity需要继承ListActivity。

因为使用了自定义的列表行布局,因此需要自己写ListAdapter。在这里是

MyImageAndTextListAdapter。该类通过AsyncImageLoader类实现对图片的异步加载;通过:

  1. private Map viewMap
复制代码
实现对异步加载了的图片做缓存。如果尚未加载图片,news_row.xml文件中声明了默认的图片文件:
  1. android:src=”@drawable/d1″
复制代码
在AsyncImageLoader中异步加载图片,使用了回调方式,通过:
  1. public interface ImageCallback{
  2. public void imageLoaded(Drawable imageDrawable,String imageUrl);
  3. }
复制代码
这里做的比较粗糙,为每个图片都创建了下载图片的线程。当图片下载成功后,通过android的Handler机制,将图片对象(Drawable)作为消息的对象(Message.obj),传递给Handler,再通过ImageCallback刷新ui中的图。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值