2013-03-25 22 views
19

Tôi không thể tìm thấy trong bất kỳ nguồn thực sự đáng tin cậy nào giải thích LazyList là gì. Bất kỳ ai?LazyList là gì?

Trả lời

37

Danh sách lười biếng là tải hình ảnh chậm từ thẻ sd hoặc từ máy chủ bằng url. Nó giống như hình ảnh tải theo yêu cầu.

Hình ảnh có thể được lưu vào bộ nhớ trong thẻ nhớ hoặc bộ nhớ điện thoại cục bộ. Url được coi là chìa khóa. Nếu khóa có trong thẻ sd, hiển thị hình ảnh từ thẻ sd khác hiển thị hình ảnh bằng cách tải xuống từ máy chủ và bộ nhớ cache giống với vị trí bạn chọn. Giới hạn bộ nhớ cache có thể được đặt. Bạn cũng có thể chọn vị trí của riêng bạn để lưu hình ảnh. Bộ nhớ cache cũng có thể bị xóa.

Thay vì người dùng đang chờ tải xuống hình ảnh lớn và sau đó hiển thị danh sách lười, tải hình ảnh theo yêu cầu. Vì hình ảnh được lưu vào bộ nhớ cache, bạn có thể hiển thị hình ảnh ngoại tuyến.

https://github.com/thest1/LazyList. Danh sách Lazy

Trong getview bạn

imageLoader.DisplayImage(imageurl, imageview); 

ImageLoader hiển thị phương pháp

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); 
    } 
    } 

Một thay thế cho Lazy Danh sách là Phổ ảnh Loader

https://github.com/nostra13/Android-Universal-Image-Loader. Nó được dựa trên danh sách lười biếng (hoạt động trên cùng một nguyên tắc). Nhưng nó có rất nhiều cấu hình khác.Tôi muốn sử dụng **** Trình tải ảnh toàn cục **** coz nó cung cấp cho bạn nhiều tùy chọn cấu hình hơn. Bạn có thể hiển thị một hình ảnh lỗi nếu downlaod không thành công. Có thể hiển thị hình ảnh với các góc tròn. Có thể cache trên đĩa hoặc bộ nhớ. Có thể nén hình ảnh.

Trong tùy chỉnh bộ chuyển đổi constructor của bạn

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(); 

Trong getView của bạn()

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

Bạn có thể cấu hình với các tùy chọn khác cho phù hợp với nhu cầu của bạn.

Cùng với Trình tải hình ảnh phổ dụng/tải nhỏ, bạn có thể xem chủ để cuộn và hiệu suất mượt mà. http://developer.android.com/training/improving-layouts/smooth-scrolling.html.

+0

Hey raghu, tôi không thể tìm nạp hình ảnh từ uri địa phương, bạn có thể giúp đỡ không ?? http: //stackoverflow.com/questions/20109034/lazy-list-fetching-images-from-sdcard-local-url –

+0

tuyệt vời giải thích, vì vậy danh sách lười biếng là tương tự như picasso hoặc lướt? – Fshamri

+1

@ user2198400 đó là những thư viện lưu trữ hình ảnh. Có họ giúp đỡ trong tải lười biếng. Cũng đọc về cơ chế tái chế listview. – Raghunandan

5

Tôi nghĩ đây là cách khác. AFAIK, Lazy Loading là định nghĩa, nơi bạn thực sự tải dữ liệu chỉ khi bạn cần, và đó là một thực hành thiết kế tốt.

Vì vậy, tôi tin rằng điều tương tự cũng áp dụng cho điều này, chỉ lần này nó đang được đề cập đến Chế độ xem danh sách.

Nếu tôi sai, vui lòng sửa tôi.

2

Ví dụ tốt nhất về danh sách lười là thông báo, tin nhắn, yêu cầu trên facebook. khi bạn cuộn thì dữ liệu sẽ được tải.

9

AFAIK, tôi sẽ giải thích cho bạn ví dụ Nếu bạn liệt kê nhiều hình ảnh có văn bản, sẽ mất một thời gian để tải danh sách của bạn vì bạn cần tải xuống hình ảnh và bạn cần đưa chúng vào danh sách . Giả sử nếu danh sách của bạn chứa 100 hình ảnh Sẽ mất rất nhiều thời gian để tải xuống từng hình ảnh và hiển thị danh sách đó. Để khiến người dùng đợi cho đến khi tải hình ảnh không thân thiện với người dùng. vì vậy những gì chúng ta cần làm. Tại thời điểm này danh sách lười biếng đi vào hình ảnh. Đó là ý tưởng cho phép hình ảnh được tải trong nền và hiển thị văn bản có nghĩa là trong khi.

Mọi người đều biết rằng chế độ xem danh sách sẽ tái chế chế độ xem của nó cho mỗi chế độ xem. ví dụ: nếu listview của bạn chứa 40 elemtns thì listview sẽ không cấp phát bộ nhớ cho 40 mục thay vì nó cấp phát bộ nhớ cho các mục hiển thị, tức là bạn chỉ có thể xem 10 mục cùng một lúc. do đó listview sẽ phân bổ 10 mục meemory.

Vì vậy, khi bạn di chuyển chế độ xem, khi đó chế độ xem sẽ làm mới. vì bạn sẽ mất tham chiếu đến hình ảnh và bạn cần phải tải chúng xuống. để tránh điều đó, bộ nhớ đệm được đưa vào hình ảnh.

Ví dụ này dựa trên kiến ​​thức của tôi trong listview, tôi không nói điều này chỉ đúng. Có thể có sai trong câu trả lời, nếu bất kỳ cơ thể nào cảm thấy tự do để thông báo cho tôi.