2013-06-05 13 views
5

ListView'de veriyi sonsuz kaydırma işleviyle ayarlamak için ArrayAdapter kullanıyorum. ListView'ın satırında bir ImageView ve iki TextViews var. İlk olarak, ListView'i 10 öğe ile yüklüyorum ve aşağıya doğru kaydırın, sonraki 10 maddeyi ListView'e yüklemek için setonscrolllistener'da web servisini arıyorum. Arraylist'e yeni öğeler eklendiğinde, adaptöre ListView'i yenilemesini söylemek için adapter.notifysetdatachanged'u ararım.ListView yeni öğeler eklendiğinde titremek

Artık sorun, yeni öğeler ListView'e eklendiğinde, tüm ListView yenilenir ve bu da ListView'da bulunan ve daha önce yüklenmiş olan görüntülerin kırpılmasına neden olur. Evet, tüm görüntüleri hem diskte hem de bellekte önbelleğe alıyorum ve kod çok kolay bir şekilde önbelleğe alınıyor.

Ayrıca bu adapter.addall(myarraylist)'u kullanarak bağdaştırıcıya veri eklemeyi denedim, ancak yardımcı olmadı. ImageViews hala titriyor. StackOverflow hakkında çok fazla araştırma yaptım ve ListView'de tüm listeyi yenilemeden daha fazla öğe ekleyemeyeceğinizi ve gösteremeyeceğinizi keşfettim. Bunu zaten biliyorum ama ListView'e yeni veri eklemenin ve önceden yüklenmiş verileri yenilemenin bir yolu olmalı.

Bağdaştırıcıyı böyle ayarlıyorum.

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

Herkes üzerinde biraz ışık tutabilir mi?

+0

Tam olarak emin değil, ancak bu ilişkili olabilir. http://stackoverflow.com/questions/13322575/android-visible-listview-images-flicker-when-adding-data-to-arrayadapter – Zerkz

+0

bunu deneyin https://github.com/commonsguy/cwac-endless –

+0

Can you görüntüleri nasıl görüyorsunuz? Şerefe – asheinfeld

cevap

2

Doğru şekilde yapıyorsunuz gibi görünüyor, bu nedenle sorun, imageLoader öğenizden olabilir. Url aynı ise görüntüyü tekrar görüntülemenize ayarlamamalıdır.

örn. Resminizdeki setTag (url) yöntemini kullanabilir ve URL değiştiyse test edebilirsiniz.

Bu yardımcı olur umarım.

+2

Evrensel Görüntü Yükleyici ile sorun gibi görünüyor. Başka bir kütüphane kullanmaya çalışacağım ve sorunun devam edip etmediğini size söyleyeceğim. Cevap için teşekkürler. –

+1

Benim durumumda bu, görüntü yükleyici sorunuydu. Kodun aynı görüntüyü indirip indirmeyeceğini kontrol etmeye başladığımda titreme etkisi gitti. – Bobrovsky

1

Çözüm, değişmediğinde resminizi yeniden yüklememektir.

sizin adaptörleri de

GetView() yapın: başarısına

// 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 
} 

(bir ImageLoadingListener eklemenizi) set holder.lastImageUrl = yol, başarısız ve holder.lastImageUrl bunun yeniden böylece null set iptal bir dahaki sefer.

İlgili konular