listView とアダプター
があり、リストの中央までスクロールしました (100 個のアイテムがある場合、アイテム #50 にいるとします)
そこに着いたら、サーバーからいくつかの更新を取得します..たとえば、新しいようにFacebook からのストーリー..
A. notifyDataSetChanged() を呼び出して位置を維持したい - そのためにB.ボレー ライブラリから
素敵なNetworkImageViewを使用しています。 (そしておそらくそれが私の問題の原因です)、現時点では、画像をリロードするとユーザーに何らかのちらつきが発生します(写真が読み込まれていない)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倍