我有帶有EventAdapter的ListView。在ListView中的ImageViews不顯示
public class EventAdapter extends BaseAdapter {
...
public View getView(int position, View view, ViewGroup parent) {
...
cache.imgIcon.setImageDrawable(ImgCache.setImg(url, progressBar));
...
}
ImgCache其緩存圖像的類。
public class ImgCache {
public static HashMap<String, Drawable> imgCache;
// get img from cache if exist, or download and put in cache
public static Drawable setImg(final String link, final ProgressBar progressBar) {
final Drawable[] image = {null};
if (imgCache.containsKey(link)) {
image[0] = imgCache.get(link);
progressBar.setVisibility(View.INVISIBLE);
} else {
new AsyncTask<Void, Void, Drawable>() {
@Override
protected Drawable doInBackground(Void... params) {
URL url = null;
try {
url = new URL(link);
URLConnection connection = url.openConnection();
image[0] = Drawable.createFromStream(connection.getInputStream(), "src");
} catch (Exception e) {
e.printStackTrace();
}
imgCache.put(link, image[0]);
return image[0];
}
@Override
protected void onPostExecute(Drawable result) {
progressBar.setVisibility(View.INVISIBLE);
}
}.execute();
}
return image[0];
}
}
問題是什麼?
當我打開我的Activity
與ListView
所有圖像開始加載。但加載完成後,他們不顯示。它看起來像:
然後我嘗試滾動2項,隨後返回到原來的位置。在這個操作之後,我可以看到2個帶有圖像的上層項目當我向他們滾動時,所有圖像也都可見。
只是一個警告:'HashMap'取決於你有多少可繪圖和用戶正在使用的設備,你的應用程序會出現OutOfMemory錯誤。 –
Budius
無論如何,我可以獲得這個HashMap的大小嗎?什麼大小必須緩存? – Val
緩存圖像(我通常使用位圖,但可繪製也一樣好)我建議你使用LruCache(https://developer.android.com/reference/android/support/v4/util/LruCache.html) – Budius