У меня есть listView и адаптер,
я прокрутил список до середины (скажем, если у нас есть 100 элементов, я нахожусь в элементе № 50)
Оказавшись там, я получаю пару обновлений с сервера. .. скажем, как новые истории из facebook..
A. Я хочу вызвать notifyDataSetChanged() и сохранить позицию — для этого я использовал this code
B. Я использую прекрасную NetworkImageView из библиотеки volley, я хочу, чтобы при notifyDataSetChanged вызывается - изображение не будет перезагружено в том виде, в котором оно есть сейчас, потому что (и, возможно, это является источником моей проблемы), в данный момент перезагрузка изображения вызывает какое-то мерцание для пользователя (нет фото- фото загружено)
ИЗМЕНИТЬ:
mQueue = Volley.newRequestQueue(getApplicationContext());// thread pool(4)
mngr.setRequestQueue(mQueue);
final int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);
mImageLoader = new ImageLoader(mQueue, new ImageCache() {
private final LruBitmapCache mCache = new LruBitmapCache(maxMemory);
public void putBitmap(String url, Bitmap bitmap) {
mCache.put(url, bitmap);
}
public Bitmap getBitmap(String url) {
return mCache.get(url);
}
});
Мое решение:
// final int maxMemory = (int) (Runtime.getRuntime().maxMemory() / 1024);
mImageLoader = new ImageLoader(mQueue, new ImageCache() {
private final BitmapLruCache mCache = new BitmapLruCache();
public void putBitmap(String url, Bitmap bitmap) {
mCache.put(url, bitmap);
}
public Bitmap getBitmap(String url) {
return mCache.get(url);
}
});
Я использовал следующую реализацию кеша bimtap lru
public class BitmapLruCache extends LruCache<String, Bitmap> implements ImageCache {
public static int ONE_KILOBYTE = 1024;
public BitmapLruCache() {
this(getDefaultLruCacheSize());
}
public BitmapLruCache(int maxSize) {
super(maxSize);
}
public static int getDefaultLruCacheSize() {
final int maxMemory = (int) (Runtime.getRuntime().maxMemory() / ONE_KILOBYTE);
final int cacheSize = maxMemory / 8;
return cacheSize;
}
@Override
protected int sizeOf(String key, Bitmap value) {
return value.getRowBytes() * value.getHeight() / ONE_KILOBYTE;
}
@Override
public Bitmap getBitmap(String url) {
return get(url);
}
@Override
public void putBitmap(String url, Bitmap bitmap) {
put(url, bitmap);
}
}
Ребята, что вы думаете?
10x