我有一个 listView 和一个适配器,
我已经滚动到列表的中间(比如说如果我们有 100 个项目,我在第 50 个项目中)
一旦到了那里,我就会从服务器获得一些更新.. 比如说,像新的来自 facebook 的故事..
A. 我想调用 notifyDataSetChanged() 并保持位置 - 因为我使用
了 B. 我正在使用 volley 库中可爱的NetworkImageView,我想要,当调用 notifyDataSetChanged时- 图像不会得到现在重新加载,因为,(也许这就是我的问题的根源),目前,重新加载图像会导致用户出现某种闪烁(没有加载照片照片)this code
编辑:
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);
}
}
你们有什么感想?
10倍