The problem that I'm getting is:
When I scroll the listview BEFORE an item's (say x) imageview is loaded, then after scrolling, that item's (x) image gets loaded and displayed in some other item's (say y) imageview for short amount of time until that item (y) imageview is not loaded.
I'm using Android Universal Image Loader library. I have the following asynctask in bindView of my listview cursor adapter:
@Override
public void bindView(View view, Context context, Cursor cursor) {
...
ImageView imageView = (ImageView) view.findViewById(R.id.icon);
new DownloadImageAsyncTask(url, imageView).execute();
...
}
private class DownloadImageAsyncTask extends AsyncTask<Void, Void, Bitmap> {
String image_link;
ImageView imageView;
final WeakReference<ImageView> viewReference;
public DownloadImageAsyncTask(String image_link, ImageView imageView) {
this.image_link = image_link;
this.imageView = imageView;
viewReference = new WeakReference<ImageView>( imageView );
}
@Override
protected Bitmap doInBackground(Void... params) {
... // downloading bitmap here
}
@Override
protected void onPostExecute(Bitmap bitmap) {
ImageView imageView = viewReference.get();
if( imageView != null ) {
ImageLoader imageLoader = ImageLoader.getInstance();
DisplayImageOptions options = new DisplayImageOptions.Builder()
.cacheOnDisk(true).cacheInMemory(true)
.showImageOnFail(R.drawable.ic_contact_picture)
.displayer(new FadeInBitmapDisplayer(300)).build();
imageLoader.displayImage(image_link, imageView, options); // new options will be used
}
}
}
Why does image that should be in item x get displayed for short amount of time in item y (when scrolling before item x image is loaded) ?
Is internal recycling of listview items causing a problem?