Hi I have used below code to load image on widget listview item.
Map<Integer, Boolean> flags = Collections.synchronizedMap(new HashMap<Integer, Boolean>());
Bitmap mBitmap;
Handler handler = new Handler(Looper.getMainLooper());
flags.put(position, false);
handler.post(new Runnable() {
@Override
public void run() {
ImageLoader imageLoader = ImageLoader.getInstance();
DisplayImageOptions options = new DisplayImageOptions.Builder().cacheInMemory(true)
.cacheOnDisc(true).resetViewBeforeLoading(true)
.build();
imageLoader.loadImage(item.mTooteet.getThumbUrl1() + "&userToken=" + userPreference.getUserToken(), options,
new SimpleImageLoadingListener() {
@Override
public void onLoadingStarted(String imageUri, View view) {
Log.d(TAG,"onLoadingStarted "+position);
}
@Override
public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
Log.d(TAG,"onLoadingFailed "+position);
flags.put(position, true);
}
@Override
public void onLoadingCancelled(String imageUri, View view) {
Log.d(TAG,"onLoadingCancelled "+position);
flags.put(position, true);
}
@Override
public void onLoadingComplete(String arg0, View arg1, Bitmap bitmap) {
Log.d(TAG,"onLoadingComplete "+position);
mBitmap = bitmap;
flags.put(position, true);
}
});
}
});
while (!flags.get(position)) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
flags.put(position, false);
if (mBitmap != null) {
Log.d(TAG,"onLoadingComplete mBitmap not null "+position);
remoteView.setImageViewBitmap(R.id.feed_image, mBitmap);
} else {
Log.d(TAG,"onLoadingComplete mBitmap null "+position);
remoteView.setImageViewResource(R.id.feed_image, R.drawable.app_icon);
}
mBitmap = null;
And in my application file i have used the below code,
// UNIVERSAL IMAGE LOADER SETUP
DisplayImageOptions defaultOptions = new DisplayImageOptions.Builder()
.cacheOnDisc(true).cacheInMemory(true)
.imageScaleType(ImageScaleType.EXACTLY)
.displayer(new FadeInBitmapDisplayer(300)).build();
ImageLoaderConfiguration uilConfig = new ImageLoaderConfiguration.Builder(
getApplicationContext())
.defaultDisplayImageOptions(defaultOptions)
.memoryCache(new WeakMemoryCache())
.discCacheSize(100 * 1024 * 1024).build();
ImageLoader.getInstance().init(uilConfig);
// END - UNIVERSAL IMAGE LOADER SETUP
But this code will download image from url everytime. I do not want to reload it every time when scrolling my app widget list view. It should be maintained in cache after downloaded first time. Could you please suggest me any idea to do this?
From your code you are creating DisplayImageOptions everytime. I think this is the reason make DisplayImageOptions for one time(Outside your Runnable objet) Use like this:
Then inside runnable to your other code
});
Please let me know the result.