极客营安卓28班学员:杨勋 异步处理加载图片
解决android同时从服务器上拉很多图片有些显示为空
package com.adapter;
import java.util.ArrayList;
import java.util.List;
import com.entity.Singer;
import com.ktv.R; import com.service.ImageService;
import android.content.Context;
import android.graphics.Bitmap; import android.os.AsyncTask; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView;
/**
* * 此类描述的是: 自定义 adapter 用于显示查找歌手 * * @author: 极客营 杨勋 * @version:1.0 * @date:2014-9-2 下午4:02:07 */ public class SortAdapter extends BaseAdapter {
private List<Singer> lists = new ArrayList<Singer>();
private LayoutInflater myInflater;
public SortAdapter(Context context, List<Singer> list) {
super(); myInflater = LayoutInflater.from(context); this.lists = list; }
@Override
public int getCount() { // TODO Auto-generated method stub return lists.size(); }
@Override
public Object getItem(int position) { // TODO Auto-generated method stub return lists.get(position); }
@Override
public long getItemId(int position) { // TODO Auto-generated method stub return position; }
ViewHolder mHolder = null;
Singer singer;
@Override
public View getView(int position, View convertView, ViewGroup parent) { View view = null; if (convertView == null) { mHolder = new ViewHolder(); view = myInflater.inflate(R.layout.gv_item, null); mHolder.iv_head = (ImageView) view.findViewById(R.id.Ib_Head); mHolder.tv_name = (TextView) view.findViewById(R.id.Tv_Name); view.setTag(mHolder); } else { view = convertView; view.setTag(mHolder); } // 将list里面的内容放到对象里面 singer = lists.get(position); // 给 控件赋值 mHolder.tv_name.setText(singer.getSinger()); AsyncLoadImage imageload = new AsyncLoadImage(); imageload.execute(mHolder.iv_head, singer.getSingerhead()); return view; }
class AsyncLoadImage extends AsyncTask<Object, Object, Void> {
@Override
protected Void doInBackground(Object... params) { try { ImageView imageView = (ImageView) params[0]; String url = (String) params[1]; Bitmap bitmap = ImageService.getImage(url); publishProgress(new Object[] { imageView, bitmap }); } catch (Exception e) { e.printStackTrace(); } return null; }
protected void onProgressUpdate(Object... progress) {
ImageView imageView = (ImageView) progress[0]; imageView.setImageBitmap((Bitmap) progress[1]); } }
private class ViewHolder {
ImageView iv_head; TextView tv_name; } } |