[英]GridView Adapter AsyncTask strange behavior when displaying images
我需要你的帮助!
在我的应用程序中,在GridView
显示图像时出现奇怪的行为。 单元格显示图像,而不是默认的R.id.noimage
和以前查看的图像。 在我添加适配器以加载位图AsyncTask
后,出现了此错误。
我究竟做错了什么?
码:
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = new ViewHolder();
View vi = null;
ImageView image;
if(convertView==null) {
vi = inflater.inflate(R.layout.gall_item, null);
Log.i("info","convertView==null");
} else {
vi = inflater.inflate(R.layout.gall_item, null);
Log.i("info","else");
}
holder.position = position;
image = (ImageView)vi.findViewById(R.id.img);
TextView url_img = (TextView)vi.findViewById(R.id.url_img);
TextView cer = (TextView)vi.findViewById(R.id.cer);
TextView idi = (TextView)vi.findViewById(R.id.ids);
url_img.setText(img2[position]);
cer.setText(cer_ar[position]);
idi.setText(id_ar[position]);
new LoadImageT(holder).execute(image, img1[position],activity.getApplicationContext(),position);
return vi;
}
class LoadImageT extends AsyncTask<Object, Void, Bitmap> {
Context context;
private ImageView imv;
private String url;
private Bitmap bitmap = null;
private int posS;
private ViewHolder mHolder;
public LoadImageT(ViewHolder holder) {
mHolder = holder;
}
@Override
protected Bitmap doInBackground(Object... params) {
imv = (ImageView) params[0];
url = (String) params[1];
context = (Context)params[2];
posS = (Integer) params[3];
bitmap = imageLoader.getBitmaptrue(url,imv,context);
return bitmap;
}
@Override
protected void onPostExecute(Bitmap result) {
if (mHolder.position == posS) {
imv.setVisibility(View.VISIBLE);
imv.setImageBitmap(result);
} else {
int stub_id = R.drawable.noimage;
imv.setImageResource(stub_id);
}
}
}
首先,正如Andy所建议的,如果您的视图为null,则对视图进行充气并设置标签,然后在该标签不为null时使用此标签,但它只会影响列表视图的效率。 其次,从适配器中删除您的异步任务代码,将其放入活动中并使用该对象。 看到这个链接吉尔解释说好听如何做多线程高效的方式。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.