サムネイルと、カスタムのText
によって設定されるListView
のAdapter
を読み込む必要があるという要件があります。サムネイルはキャッシュメモリに保存する必要があります。これは、ユニバーサルイメージローダーを使用しているためです。ただし、その実装と、ListView
からURL
内のイメージをロードするための私の要件に従って使用する方法については、かなり混乱しています。良い実装でのいくつかの方法を教えてください。
以下のコード行をアダプターのgetView()メソッドに書き込みます。ここで、imageUrls [position]は画像URLの配列で、holder.imageは画像ビューです。
imageLoader.displayImage(imageUrls[position], holder.image, null);
以下のコード行をアダプターコンストラクターに記述します。
ImageLoader imageLoader=new ImageLoader(activity.getApplicationContext());
それはあなたの問題を解決します、そしてそれに関して何か質問があれば教えてください。
ユニバーサルイメージローダーの例の完全なソースコードについては、以下のリンクを参照してください。
アダプタのoncreate()定義で
ImageLoader imageLoader=new ImageLoader(activity.getApplicationContext());
そして、それをgetView()メソッドで使用します。
imageLoader.DisplayImage(//your image url, //your imageView);
AQuery Android-Query)-Android用の超シンプルなUI操作フレームワークを使用することをお勧めします。
AQueryはライブラリとして提供され、ビルドパスに含める必要があります。
AQueryでは、次の行を使用して、イメージをダウンロード、表示(効果あり)、キャッシュ(メモリとディスクの両方で)できます。
AQuery aq = new AQuery(yourActivity.this);
boolean memCache = true;
boolean fileCache = true;
aq.id(R.id.image1).image("http://www.example.com/image.jpg", memCache, fileCache);
AQueryはすべてのデータダウンロードプロセスを処理し、指定したImageViewに画像を表示します。イメージをロードすると、ブールパラメータmemCache
およびfileCache
に従ってメモリ(またはディスク)にキャッシュされます。次回は、メモリキャッシュまたはファイルキャッシュからイメージをロードします。
詳細と例については、---(http://code.google.com/p/Android-query/ のAQueryプロジェクトにアクセスしてください。
画像の読み込みに関するその他のコード- http://code.google.com/p/Android-query/wiki/ImageLoading
これにより、ユニバーサルイメージローダーを使用してimageurlを読み込むのに役立ち、imageurlのステータスが読み込み開始、完了、または失敗になり、リクエストはキャンセルステータスも提供されます。
public void ImageLoaderListener(String url){
imageLoader.loadImage(url,new ImageLoadingListener(){
@Override
public void onLoadingStarted(String imageUri, View view) {
Log.e("tag", "onLoadingStarted");
}
@Override
public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
Log.e("tag", "onLoadingFailed");
}
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
Log.e("tag", "onLoadingComplete");
imageView.setImageBitmap(loadedImage);
}
@Override
public void onLoadingCancelled(String imageUri, View view) {
Log.e("tag", "onLoadingCancelled");
}
});
}
画像をキャッシュしたい場合は、以下の関数を追加してください...しかし、非常に高度なので、作成時に開始します.
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getApplicationContext())
.defaultDisplayImageOptions(DisplayImageOptions.createSimple())
.build();
imageLoader = ImageLoader.getInstance();
if (!imageLoader.isInited()) {
imageLoader.init(config);
}
defaultOptions = new DisplayImageOptions.Builder()
.cacheInMemory(true)
.cacheOnDisc(true)
.build();
次に、そのImageLoadingListener()関数を追加します...
public void ImageLoaderListener(String url){
imageLoader.loadImage(url, defaultOptions, new ImageLoadingListener() {
public class CategoryModel
{
String CatId;
String CatName;
String Image;
String Price;
Bitmap ImgSrc;
CategoryAdapter Ma;
public CategoryModel()
{
}
public CategoryModel(String catid,String catname,String image,String price)
{
this.CatId = catid;
this.CatName = catname;
this.Image = image;
this.Price = price;
}
public CategoryModel(String catname,String image,String price)
{
this.CatName = catname;
this.Image = image;
this.Price = price;
}
public void setCatId(String catid)
{
this.CatId =catid;
}
public String getCatId()
{
return this.CatId;
}
public void setCatName(String catname)
{
this.CatName=catname;
}
public String getCatName()
{
return this.CatName;
}
public void setImage(String image)
{
this.Image=image;
}
public String getImage()
{
return this.Image;
}
public void setPrice(String price)
{
this.Price=price;
}
public String getPrice()
{
return this.Price;
}
public Bitmap getImagesrc()
{
return this.ImgSrc;
}
public void setAdapter(CategoryAdapter adf)
{
this.Ma = adf;
}
public CategoryAdapter getAdapter()
{
return this.Ma;
}
public void LoadImage(CategoryAdapter adap)
{
this.Ma = adap;
if(Image != null && !Image.equals(""))
{
new ImageLoader().execute(new String[]{ Image });
}
}
public static Bitmap getBitmapUrl(String src)
{
try
{
URL url = new URL(src);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoInput(true);
connection.connect();
InputStream input = connection.getInputStream();
Bitmap mybitmap = BitmapFactory.decodeStream(input);
connection.disconnect();
return mybitmap;
}
catch (Exception e) {
return null;
}
}
private class ImageLoader extends AsyncTask<String, String, Bitmap>
{
@Override
protected void onPreExecute()
{
}
@Override
protected Bitmap doInBackground(String... params) {
try
{
Bitmap b = getBitmapUrl(params[0]);
return b;
}
catch (Exception e)
{
Log.e("Excep", e.toString());
return null;
}
}
@Override
protected void onPostExecute(Bitmap res)
{
if(res!=null)
{
ImgSrc = res;
if(Ma!=null)
{
Ma.notifyDataSetChanged();
}
}
else
{
Log.e("Error", "Image not Loading");
}
}
}
}