ListView内のImageViewでURLから画像を取得する際
Viewの再利用時にImageViewがちらつくことがあります。
ImageViewにURL文字列をタグ付けしてgetView()内でURL比較、URLが異なる場合だけ画像取得する、なんて手法が取られてました。
VolleyのImageLoaderを利用した際も同じようなことができますが更にスマートに実現できました。
ListViewとImageLoaderといえば、この記事にてImageContainerをImageViewにタグ付けしてView再利用時にImageLoaderのcancelを行うのが出ていますがこれを利用します。
ImageContainer mContainer = (ImageContainer)holder.imageView.getTag();
if(mContainer != null && mContainer.getBitmap() != null && mContainer.getRequestUrl().equals(url)){
holder.imageView.setImageBitmap(mContainer.getBitmap());
}else{
ImageListener imageListener = ImageLoader.getImageListener(holder.imageView, 0, 0);
ImageContainer mContainer = mImageLoader.get(url, imageListener);
holder.imageView.setTag(mContainer);
}
ImageContainerは前回取得した画像のBitmapとURLを持っています。
あとは単純にBitmapを持っていてURLが一緒だったらそのBitmapをImageViewに設定。
異なっていたらいつも通りの処理。ってだけです。
※ImageLoaderのget時に都度newされているためBitmapとURLの整合性は取れていると思っていいです。
2014年10月31日金曜日
2014年10月30日木曜日
GenymotionのFailed to import OVAエラー
久しぶりにGenymotionを使おうとしたら起動しなくなってしまっていました。
原因は不明ですがGenymotionの更新かOS更新が原因だったのでは、と思ってます。
苦肉の策でGenymotion及びVirtualBoxをAppCleanerで削除して
再インストールしたところ今度は端末登録できなくなってしまいました。
エラー内容は
Failed to import OVA
これとかこれとか見たのですが解決せず。。。
ダメ元でGenymotion Shellを実行したらアプリの認証(ダイアログのやつ)を
してなくて、これが原因で端末追加できていませんでした。
Genymotionを更新したらGenymotion Shell起動は必須のよう。
原因は不明ですがGenymotionの更新かOS更新が原因だったのでは、と思ってます。
苦肉の策でGenymotion及びVirtualBoxをAppCleanerで削除して
再インストールしたところ今度は端末登録できなくなってしまいました。
エラー内容は
Failed to import OVA
これとかこれとか見たのですが解決せず。。。
ダメ元でGenymotion Shellを実行したらアプリの認証(ダイアログのやつ)を
してなくて、これが原因で端末追加できていませんでした。
Genymotionを更新したらGenymotion Shell起動は必須のよう。
登録:
投稿 (Atom)