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

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刚上路,还没考虑缓存,上面有毛病的地方,路过的朋友请帮忙纠正下,多谢了。

转载于:https://my.oschina.net/liangzhenghui/blog/197054

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值