0
我在ListView中加載圖像,並使用convertView添加新項目。我發現,當我快速向下滾動時,幾個屏幕上的圖像顯示在當前的圖像之前..在getView中,我正在實例化一個AsyncTask。我該如何解決?會使圖像緩存工作,還是我必須找到一種方法來與已啓動的AsyncTasks進行通信,並告訴它們停止加載不會顯示的圖像?ListView圖像和使用convertView
下面是相關代碼:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.list_item_course, null);
}
CourseItem courseItem = courseItemList.get(position);
// ImageView
Bitmap bm = courseItem.getPhotoBitmap();
ImageView iv = (ImageView) convertView.findViewById(R.id.imageView1);
iv.setAdjustViewBounds(true);
iv.setMaxHeight(imageWidth);
iv.setMaxWidth(imageWidth);
if (bm != null) {
iv.setImageBitmap(bm);
} else {
CourseItemAndView container = new CourseItemAndView();
container.courseItem = courseItem;
container.view = convertView;
ImageLoader loader = new ImageLoader();
loader.execute(container);
}
...
return convertView;
}
private class CourseItemAndView {
public CourseItem courseItem;
public Bitmap bitmap;
public View view;
}
private class ImageLoader extends AsyncTask<CourseItemAndView, Void, CourseItemAndView> {
@Override
protected CourseItemAndView doInBackground(CourseItemAndView... params) {
CourseItemAndView container = params[0];
CourseItem ci = container.courseItem;
try {
String imageUrl = ci.getSmallIcon();
InputStream in = (InputStream) new URL(imageUrl).getContent();
Bitmap bitmap = BitmapFactory.decodeStream(in);
if (bitmap == null)
System.out.println("HERE");
ci.setPhotoBitmap(bitmap);
in.close();
container.bitmap = bitmap;
return container;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(CourseItemAndView result) {
if (result == null) {
System.out.println("HERE");
} else {
ImageView iv = (ImageView) result.view.findViewById(R.id.imageView1);
iv.setImageBitmap(result.bitmap);
}
}
}
不僅要他們停止時,ImageView的是淡出人們的視線,而且他們應該只加載其位圖中右邊的ImageView。你沒有顯示任何處理它的代碼。你也沒有告訴。請發佈完整的getView代碼。 – greenapps 2014-09-24 16:34:52
如果convertView不爲空,我重用該視圖,所以當我滾動說2屏幕時,兩個不同的位圖被加載到相同的convertView的ImageView子。除了「return convertView」之外,getView中沒有其他有用的代碼...我會嘗試發佈其他相關代碼。 – 2014-09-24 17:27:22