Что такое LazyList?

Я не могу найти в каком-либо действительно достоверном источнике, объясняющем, что такое LazyList. Кто?

4 ответов


Лентяй ленивая загрузка изображений с 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);  //dispaly iamge
     else   //downlaod image and dispaly. add to cache.
     {
        queuePhoto(url, imageView);
        imageView.setImageResource(stub_id);
     }
   }

альтернативой Lazy List является Universal Image Погрузчик

https://github.com/nostra13/Android-Universal-Image-Loader. Он основан на Lazy List (работает по тому же принципу). Но у него много других конфигураций. Я бы предпочел использовать * * * * универсальный загрузчик изображений****, потому что он дает вам больше параметров конфигурации. Вы можете отобразить изображение ошибки, если downlaod не удалось. Может отображать изображения с закругленными углами. Смогите кэшировать на диске или памяти. Может сжимать изображение.

в свой пользовательский адаптер конструктор

  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

вы можете настроить другие параметры в соответствии с вашими потребностями.

наряду с ленивой загрузкой / универсальным загрузчиком изображений вы можете просматривать держатель для плавной прокрутки и производительности. http://developer.android.com/training/improving-layouts/smooth-scrolling.html.


AFAIK, я объясню вам на примере Если список содержит много изображений с текстом, загрузка списка займет некоторое время, потому что вам нужно загрузить изображения и заполнить их в списке. Предположим, если ваш список содержит 100 изображений потребуется много времени, чтобы загрузить каждое изображение и показать его объекта listitem. Чтобы заставить пользователя ждать, пока загрузка изображений не будет удобной для пользователя. так что нам нужно сделать. В этот момент появляется ленивый список. Это идея это позволяет загружать изображения в фоновом режиме и показывать текст.

все знают, что listview перерабатывает свои представления для каждого представления. я.е если ваш ListView содержит 40 elemtns затем в ListView не выделить память для 40 пунктов вместо того, чтобы выделить память для видимых элементов, я.е сказать, вы видите только 10 элементов одновременно. таким образом, listview выделит 10 элементов meemory.

поэтому, когда вы прокручиваете представление, то представление будет обновляться. из-за этого ты потеряешь ссылка на картинки и вам нужно скачивать их снова. чтобы избежать этого, кэширование входит в картину.

этот пример основан на моих знаниях в ListView, я не говорю, что это единственно правильный. В ответе может быть неправильный ответ, если кто-то найдет, не стесняйтесь сообщить мне.


Я думаю, что это наоборот. Насколько мне известно, Загрузка это определение, где вы фактически загружаете данные только тогда, когда вам это нужно, и это хорошая практика проектирования.

поэтому я считаю, что то же самое относится и к этому, только на этот раз он ссылается на представление списка.

Если я ошибаюсь, пожалуйста, поправьте меня.


лучшим примером ленивого списка являются уведомления facebook, сообщения, запросы. при прокрутке данные будут загружены.