2013-06-05 30 views
5

Tôi đang sử dụng ArrayAdapter để đặt dữ liệu trong ListView với chức năng cuộn vô tận. Có một ImageView và hai TextViews trong hàng của ListView. Lúc đầu, tôi đang tải ListView với 10 mục và khi cuộn xuống, tôi gọi dịch vụ web trong setonscrolllistener để tải 10 mục tiếp theo vào ListView. Khi các mục mới được thêm vào Arraylist, tôi chỉ cần gọi adapter.notifysetdatachanged để yêu cầu bộ điều hợp làm mới ListView.ListView nhấp nháy khi các mục mới được thêm vào nó

Bây giờ vấn đề là, bất cứ khi nào các mục mới được thêm vào ListView, toàn bộ ListView làm mới và gây ra các hình ảnh trong ListView, đã được tải, để nhấp nháy. Có, tôi đang lưu vào bộ nhớ đệm tất cả các hình ảnh trong cả đĩa và bộ nhớ, và mã lưu trữ rất mượt mà.

Tôi cũng đã thử thêm dữ liệu vào bộ chuyển đổi bằng cách sử dụng số adapter.addall(myarraylist) này nhưng không hiệu quả. ImageViews vẫn đang nhấp nháy. Tôi đã tìm kiếm rất nhiều về nó trên StackOverflow và thấy rằng bạn không thể thêm và hiển thị thêm các mục trong ListView mà không làm mới toàn bộ listView. Tôi đã biết rằng nhưng phải có một số cách để thêm dữ liệu mới vào ListView và không làm mới dữ liệu đã được tải.

Tôi đang thiết lập bộ điều hợp như thế này.

public View getView(int position, View view, ViewGroup parent) 
     { 

     int main = R.layout.layout; 
     ViewHolder holder = null; 
     LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     if (view == null) { 

      holder = new ViewHolder(); 
      view = inflater.inflate(main, null); 
      holder.image = (ImageView) convertView.findViewById(R.id.imageview); 

      ///More stuff 

      view.setTag(holder); 
     } else { 
      holder = (ViewHolder)view.getTag(); 
     } 

     // Loading ImageViews by Urls 

     return view; 
    } 

Có ai vui lòng làm sáng tỏ không?

+0

Không chính xác, nhưng điều này có thể liên quan. http://stackoverflow.com/questions/13322575/android-visible-listview-images-flicker-when-adding-data-to-arrayadapter – Zerkz

+0

thử https://github.com/commonsguy/cwac-endless –

+0

Bạn có thể cho biết cách bạn tải hình ảnh vào chế độ xem? Chúc mừng – asheinfeld

Trả lời

2

Dường như bạn đang thực hiện đúng cách, do đó, sự cố có thể là từ trình tải hình ảnh của bạn. Nó không nên đặt lại hình ảnh trên số lần xem của bạn nếu url giống nhau.

ví dụ: Bạn có thể sử dụng phương thức setTag (url) trên imageView của mình và kiểm tra xem url có thay đổi hay không.

Hy vọng điều này sẽ giúp bạn.

+2

Có vẻ như đó là vấn đề với Trình tải ảnh toàn cục. Tôi sẽ cố gắng sử dụng một thư viện khác và cho bạn biết nếu vấn đề vẫn còn tồn tại. Cảm ơn vi đa trả lơi. –

+1

Trong trường hợp của tôi, đó là vấn đề trình tải hình ảnh. Ngay sau khi tôi bắt đầu kiểm tra xem mã có tải xuống cùng một hình ảnh, hiệu ứng nhấp nháy đã biến mất hay không. – Bobrovsky

1

Giải pháp là không tải lại hình ảnh của bạn khi nó không thay đổi.

Trong adapter của bạn getView() làm:

// schedule rendering: 
final String path = ... (set path here); 
if (holder.lastImageUrl == null || !holder.lastImageUrl.equals(path) 
       || holder.headerImageView.getDrawable() == null) { 
    // refresh image 
    imageLoader.displayImage(imageUri, imageAware); 
} else { 
    // do nothing, image did not change and does not need to be updated 
} 

về thành công (thêm một ImageLoadingListener) bạn thiết holder.lastImageUrl = con đường, trên không và hủy bạn thiết holder.lastImageUrl null để nó sẽ được tải lại lần tới.

Các vấn đề liên quan