2012-05-01 7 views
2

私はリモートビューの遅延読み込みを行うカスタムListViewを持っています。リスト項目をクリックすると、新しいアクティビティが開始され、画像がWebビューに表示されます。 問題は、画像がlistviewアダプタによってプリロードされていても、webviewは常に画像を読み込みます。 WebViewに画像がロードされるようにするには、がプリロードされていない場合にのみ使用してください。レイジーロードされた画像がファイルキャッシュに格納されているwebviewでプリロードされたビットマップを表示

public void DisplayImage(String url, ImageView imageView) 
{ 
    imageViews.put(imageView, url); 
    Bitmap bitmap=memoryCache.get(url); 
    if(bitmap!=null) 
     imageView.setImageBitmap(bitmap); 
    else 
    { 
     queuePhoto(url, imageView); 
     imageView.setImageResource(stub_id); 
    } 
} 

public FileCache(Context context){ 
    //Find the dir to save cached images 
    if (android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)) 
     cacheDir=new File(android.os.Environment.getExternalStorageDirectory(),"LazyList"); 
    else 
     cacheDir=context.getCacheDir(); 
    if(!cacheDir.exists()) 
     cacheDir.mkdirs(); 
} 

public File getFile(String url){ 
    //I identify images by hashcode. Not a perfect solution, good for the demo. 
    String filename=String.valueOf(url.hashCode()); 
    //Another possible solution (thanks to grantland) 
    //String filename = URLEncoder.encode(url); 
    File f = new File(cacheDir, filename); 
    return f; 

} 

答えて

1

これに対処する適切な方法でインストールすることです。ここ

は、私がリストビューで画像をプリロードする方法でありますHttpResponseCacheには、イメージのダウンロードに使用するクライアント/接続があります。 APIのレベル13までプラットフォームの実装は提供されていませんが、Android 1.5以降で動作するbackported versionがあります。このキャッシング機構はHttp(s)URLConnectionにのみ適しています。 HttpClientを使用する場合は、ApacheのHttpClient Caching Moduleが必要になります。

すぐに解決したら、WebViewClientshouldInterceptRequest(...)メソッドをご覧ください。このメソッドをオーバーライドすることで、間違っていなければ、イメージを含むリソースがフェッチされるたびに起動されるリクエストを傍受することができます。ローカルルックアップを行ってイメージがすでにダウンロードされているかどうかを確認するチェックを実装し、そうであればWebResourceResponseでラップして返します。ファイルがローカルで利用できない場合は、何もしないで、クライアントがダウンロードを処理するようにしてください。これの欠点は、Webクライアントによってダウンロードされたものは、遅延画像ローダで利用できないことです。

+0

ありがとう、私はshouldInterceptRequestメソッドを試していますが、このmetodは決して呼び出されません!なにか提案を? –

+0

Bugger、それはHoneycomb +の方法だと言って忘れていました...古いデバイスでは呼び出されません。あなたはおそらく私の最初の提案に従わなければならないでしょう。あるいは、ローカルに存在するかどうかを確認するために、画像URLを 'WebView'(これはあなたがそこに表示しているものだけです)に渡す前にチェックすることもできます。そうであれば、ローカルURLを渡します。それ以外の場合はリモートURLを渡します。 –

関連する問題