2014-01-09 245 views
0

我有點困惑的緩存程序時,圖象存儲到一個自定義的ArrayAdapter ....緩存圖像

據我所知,你只能在活動中使用LruCache,所以如何在適配器中緩存圖像?

+0

什麼圖片?你在說你下載的圖像嗎? – Phil

+0

在這種特殊情況下,有本地圖像(可繪製),但我的問題是更一般的,Android文檔沒有如此清楚地解釋它 – basteez

+0

我不知道我知道你的意思 - 你想緩存drawables?你能發佈你的代碼嗎? – Phil

回答

0

只在適配器中存儲圖像URI而不是圖像。

+0

即使使用本地可繪製設備? – basteez

+0

本地可繪製的資源id像R.drawable。使用這些來存儲它們。 – AndRSoid

+0

所以你說圖像存儲到適配器與他們的uri,然後緩存他們的活動,對不對? – basteez

1

緩存僅僅是一個數據結構,用於跟蹤對象。您可以創建自己的緩存,然後使用URL作爲關鍵字保存位圖。例如,取對象:

public static Map<String, Object> cache = new HashMap<String, Object>(); 

這是您的緩存。您現在可以通過他們的網址保存圖片。例如,假設你從http://www.example.com/img.png得到一個位圖。這樣一個簡單的方法,將獲得的圖像緩存(如果存在),或者獲得一個新的,如果它不:

public Bitmap getImage(String url) 
{ 
    synchronized(cache) { 
     Object o = cache.get(url); 
     if (o != null) 
      return (Bitmap) o; 
     //here, get the bitmap from the URL using whatever method you want, then save it and return it: 
     Bitmap bmp = getBitmapForURL(url); 
     cache.put(url, bmp); 
     return bmp; 
    } 
} 

所以您只要致電:

myImageView.setImageBitmap(getImage("http://www.example.com/img.png")); 
+0

這是不可能使用LruCache? – basteez

+0

@tizionario是的,這看起來像我重寫了'LruCache'。另請注意,兩個實現**都不限於Activities **。 – Phil

+0

真的嗎?從Android doc中讀取,似乎我只能在活動中使用LruCache,不知道這一點 – basteez