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