21

LazyListが何であるかを説明している本当に信頼できる情報源を見つけることができません。誰?

4

4 に答える 4

39

遅延リストは、sdカードまたはサーバーからURLを使用して画像を遅延読み込みすることです。これは、画像のオンデマンドロードのようなものです。

画像はローカルのSDカードまたは携帯電話のメモリにキャッシュできます。URLがキーと見なされます。キーがSDカードにある場合、画像はSDカードから表示されます。それ以外の場合は、サーバーから画像をダウンロードして、選択した場所にキャッシュします。キャッシュ制限を設定できます。画像をキャッシュするために独自の場所を選択することもできます。キャッシュをクリアすることもできます。

ユーザーが大きな画像をダウンロードして表示するのを待つ代わりに、レイジーリストはオンデマンドで画像をロードします。画像はキャッシュされるため、オフラインで画像を表示できます。

https://github.com/thest1/LazyList。怠惰なリスト

あなたのgetviewで

imageLoader.DisplayImage(imageurl, imageview);

ImageLoaderの表示方法

    public void DisplayImage(String url, ImageView imageView) //url and imageview as parameters
    {
    imageViews.put(imageView, url);
    Bitmap bitmap=memoryCache.get(url);   //get image from cache using url as key
    if(bitmap!=null)         //if image exists
        imageView.setImageBitmap(bitmap);  //display iamge
     else   //downlaod image and dispaly. add to cache.
     {
        queuePhoto(url, imageView);
        imageView.setImageResource(stub_id);
     }
   }

レイジーリストの代わりにユニバーサルイメージローダーがあります

https://github.com/nostra13/Android-Universal-Image-Loader。これはレイジーリストに基づいていますが(同じ原理で動作します)、他にも多くの構成があります。より多くの構成オプションが提供されるため、UniversalImageLoaderを使用することをお勧めします。ダウンロードが失敗した場合、エラー画像が表示されることがあります。角が丸い画像を表示できます。ディスクまたはメモリにキャッシュできます。画像を圧縮することができます。

カスタムアダプターコンストラクターで

  File cacheDir = StorageUtils.getOwnCacheDirectory(a, "your folder");

 // Get singletone instance of ImageLoader
 imageLoader = ImageLoader.getInstance();
 // Create configuration for ImageLoader (all options are optional)
 ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(a)
          // You can pass your own memory cache implementation
         .discCache(new UnlimitedDiscCache(cacheDir)) // You can pass your own disc cache implementation
         .discCacheFileNameGenerator(new HashCodeFileNameGenerator())
         .enableLogging()
         .build();
 // Initialize ImageLoader with created configuration. Do it once.
 imageLoader.init(config);
 options = new DisplayImageOptions.Builder()
.showStubImage(R.drawable.stub_id)//display stub image
.cacheInMemory()
.cacheOnDisc()
.displayer(new RoundedBitmapDisplayer(20))
.build();

getView()で

  ImageView image=(ImageView)vi.findViewById(R.id.imageview); 
  imageLoader.displayImage(imageurl, image,options);//provide imageurl, imageview and options

必要に応じて、他のオプションを使用してユニバーサルイメージローダーを構成できます。

LazyList / Universal Image Loaderに加えて、このWebサイトを表示して、スムーズなスクロールとパフォーマンスを実現できます。 http://developer.android.com/training/improving-layouts/smooth-scrolling.html

于 2013-03-25T18:44:30.487 に答える
9

ちなみに、例を挙げて説明します。テキストを含む画像がリストに多数含まれている場合、画像をダウンロードしてリストに入力する必要があるため、リストの読み込みに時間がかかります。リストに100枚の画像が含まれている場合、各画像をダウンロードしてリストアイテムを表示するには時間がかかります。画像が読み込まれるまでユーザーを待たせるのはユーザーフレンドリーではありません。だから私たちがする必要があること。この時点で、怠惰なリストが浮かび上がります。画像をバックグラウンドでロードし、テキストを表示するという考え方です。

listviewがすべてのビューのビューをリサイクルすることは誰もが知っています。つまり、リストビューに40個の要素が含まれている場合、リストビューは40個のアイテムにメモリを割り当てず、代わりに表示されているアイテムにメモリを割り当てます。つまり、一度に10個のアイテムしか表示できないとします。したがって、listviewは10個のアイテムのメモリを割り当てます。

したがって、ビューをスクロールすると、ビューが更新されます。あなたのためにあなたは画像へのあなたの参照を失い、あなたはそれらをagianにダウンロードする必要があります。それを回避するために、キャッシングが思い浮かびます。

この例は、リストビューでの私の知識に基づいています。これが正しいと言っているのではありません。誰かが私に知らせてくださいを見つけたら、答えに間違っているかもしれません。

于 2013-03-25T18:28:09.937 に答える
5

これは逆だと思います。AFAIK、遅延読み込みは、必要なときにのみ実際にデータを読み込む定義であり、優れた設計手法です。

したがって、これにも同じことが当てはまると思いますが、今回はリストビューを参照しています。

私が間違っている場合は、私を訂正してください。

于 2013-03-25T18:21:52.873 に答える
2

怠惰なリストの最良の例は、Facebookの通知、メッセージ、リクエストです。スクロールすると、データが読み込まれます。

于 2013-03-25T18:27:54.270 に答える