文档章节

android在listView中动态加载图片的一段代码(性能啥的还没考虑)

巴顿
 巴顿
发布于 2014/02/02 21:59
字数 409
阅读 476
收藏 3
public class CustomAdapter extends BaseAdapter {

	private List<Novel> currentData;//

	private LayoutInflater inflater;

	private Context context;

	private ListView listView;

	public CustomAdapter() {
		super();
		// TODO Auto-generated constructor stub
	}

	public CustomAdapter(List<Novel> currentData, Context context,
			ListView listView) {
		this.currentData = currentData;
		this.context = context;
		inflater = LayoutInflater.from(context);
		this.listView = listView;
	}

	@Override
	public int getCount() {
		// TODO Auto-generated method stub
		return currentData.size();
	}

	@Override
	public Object getItem(int position) {
		// TODO Auto-generated method stub
		return position;
	}

	@Override
	public long getItemId(int position) {
		// TODO Auto-generated method stub
		return position;
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		final Bitmap image = null;
		final int pos = position;
		View view = inflater.inflate(R.layout.recommend_novel_item, null);
		ImageView imageView = (ImageView) view.findViewById(R.id.img);
		final String imageUrl = currentData.get(position).getImgUrl();
		imageView.setTag(imageUrl);
		new Thread() {
			@Override
			public void run() {
				Bitmap image = ImageUtil.getImage(currentData.get(pos)
						.getImgUrl());
				Message message = handler.obtainMessage();
				//用bundle封装数据的传递
				Bundle b = new Bundle();
				b.putString("imageUrl", imageUrl);
				message.setData(b);
				message.obj = image;
				message.sendToTarget();
			}

		}.start();
		if(image == null) {
			imageView.setImageResource(R.drawable.ic_launcher);
		}
		TextView author = (TextView) view.findViewById(R.id.author);
		author.setText(currentData.get(position).getAuthor());
		TextView title = (TextView) view.findViewById(R.id.title);
		title.setText(currentData.get(position).getName());
		return view;
	}

	public void addItem(List<Novel> items) {
		for (Novel item : items) {
			currentData.add(item);
		}
	}

	private Handler handler = new Handler() {
		// 重写handleMessage()方法,此方法在UI线程运行
		@Override
		public void handleMessage(Message msg) {
			Bundle b = msg.getData();
			String imageUrl = (String)b.get("imageUrl");
			Bitmap image = (Bitmap) msg.obj;
			ImageView imageView = (ImageView) listView
					.findViewWithTag(imageUrl);
			imageView.setImageBitmap(image);
		}
	};

	public Context getContext() {
		return context;
	}

	public void setContext(Context context) {
		this.context = context;
	}

	public ListView getListView() {
		return listView;
	}

	public void setListView(ListView listView) {
		this.listView = listView;
	}

}

在一个item分别起一个thread的时候,设置图片的handler是怎么知道当前的thread对应的handler获取到的图片恰好对应这个item?

这里有个关键的地方是通过在thread中设置

imageView.setTag(imageUrl);

然后在handler中通过下面的方法获取mageUrl对应的图片所在的item中的imageView

ImageView imageView = (ImageView) listView
					.findViewWithTag(imageUrl);

PS:android刚上路,还没考虑缓存,上面有毛病的地方,路过的朋友请帮忙纠正下,多谢了。

© 著作权归作者所有

共有 人打赏支持
巴顿

巴顿

粉丝 50
博文 232
码字总数 27820
作品 0
广州
程序员
私信 提问
高效使用Bitmaps(二) 后台加载Bitmap

为什么要在后台加载Bitmap? 有没有过这种体验:你在Android手机上打开了一个带有含图片的ListView的页面,用手猛地一划,就见那ListView嘎嘎地卡,仿佛每一个新的Item都是顶着阻力蹦出来的一...

扔物线
2013/12/12
0
7
Android listview 不同的项底色不同,点击再变不同颜色

需求变更,android版本的app需要对listview的不同项设置不同的颜色,并且点击之后,底色再变。 先给一个效果图。 先讲讲业务,listview里面的数据是动态的,而底色图片是从网络上下载下来。当...

szu_吴鹏
2014/04/01
0
0
Android开发性能优化总结

Android性能调优包含 移动网络优化 Java(Android)代码优化 布局优化 数据库性能优化 参考链接 http://www.trinea.cn/android/android-traceview/ 本文主要针对代码调优 应用程序的性能问题体...

蜗牛崛起
2017/10/19
0
0
(GridView)ListView.setSelector(),ListView中Header/Footer的删除和添加/显示与隐藏

GridView.selector: GridView的设置根据Item选择状态改变背景状态 -- ListView.setSelector() 1.方法一:在listview中配置android:listSelector="@drawable/xxx" 或者在listview的item中添加......

desaco
01/21
0
0
Afinal 0.2 发布 Android的快速开发框架(ORM,IOC)

Afinal是一个开源的android的orm和ioc应用开发框架,其特点是小巧灵活,代码入侵量少。 在android应用开发中,通过afinal的ioc框架,诸如ui绑定,事件绑定,通过注解可以自动绑定。通过afina...

理工男海哥
2012/10/29
7K
12

没有更多内容

加载失败,请刷新页面

加载更多

Linux iptables之mangle表使用案例

mangle表的用途 mangle表的主要功能是根据规则修改数据包的一些标志位,以便其他规则或程序可以利用这种标志对数据包进行过滤或策略路由。 mangel表使用示例 示例1-策略路由1 内网的客户机通...

月下狼
47分钟前
2
0
OSChina 周日乱弹 —— 兼职我想去学学布偶戏

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @clouddyy : 《火炎 - 女王蜂》 《火炎 - 女王蜂》 手机党少年们想听歌,请使劲儿戳(这里) @小鱼丁 :还在睡觉突然接到一个小哥哥电话“x...

小小编辑
59分钟前
61
5
租房软件隐私保护如同虚设

近日,苏州市民赵先生向江苏新闻广播新闻热线025-84658888反映,他在“安居客”手机应用软件上浏览二手房信息,并且使用该软件自动生成的虚拟号码向当地一家中介公司进行咨询。可电话刚挂不久...

linux-tao
今天
3
0
分布式项目(五)iot-pgsql

书接上回,在Mapping server中,我们已经把数据都整理好了,现在利用postgresql存储历史数据。 iot-pgsql 构建iot-pgsql模块,这里我们写数据库为了性能考虑不在使用mybatis,换成spring jd...

lelinked
今天
6
0
一文分析java基础面试题中易出错考点

前言 这篇文章主要针对的是笔试题中出现的通过查看代码执行结果选择正确答案题材。 正式进入题目内容: 1、(单选题)下面代码的输出结果是什么? public class Base { private Strin...

一看就喷亏的小猿
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部