2016-03-31 19 views
2

Temelde tüm bir düzen içinde benim app ana besleme için gereken her şeye sahip. Tüm değişken öğeler (resimler, video küçük resimleri vb.) Ilk başta GONE olarak ayarlanmış ve gerektiğinde VISIBLE olarak ayarlanmıştır.Android - Tek bir düzen ile RecyclerView, çok setVisibility

Sorun, bazen RecyclerView'un geri dönüşüm davranışından kaynaklanıyor olabilir; GONE olması gereken öğe yanlış yerlerde VISIBLE'dur.

Örnek:

hiçbir 1 Text içeren Madde

hiçbir 2 Image içeren Öğe

Parça no 3 Image

Ben öğeye hiçbir x aşağı kaydırma tutmak içerir, sonra geri kaydırın ve bende şu şekilde olsun:

Parça no 1 öğeden hiçbir x, ben özel bir ViewHolder kullanıyorum hiçbir 2 Image içeren hiçbir 3

Ürün

Parça no 3 Image

içeren bazen öğeyi Resmi içeren extends RecyclerView.ViewHolder . CustomViewHolder'un amacı, yerleşim bildirimi ve başlatma içindir.

ProgressBar progressBar; 
    View viewDimmer; 
    RelativeLayout postListWrapper; 

    ... 

    public ObjectViewHolder(View v) { 
     super(v); 
     progressBar = (ProgressBar)v.findViewById(R.id.post_inscroll_progressBar); 
     viewDimmer = (View)v.findViewById(R.id.post_inscroll_viewDimmer); 
     postListWrapper = (RelativeLayout)v.findViewById(R.id.post_inscroll_postListWrapper); 
    } 

ben resim yüklemek nasıl bir örnek: hayır url sunucusuna

((ObjectViewHolder) holder).userPostImageWrapper.setVisibility(View.GONE); 
((ObjectViewHolder) holder).userPostYoutubeImageWrapper.setVisibility(View.GONE); 

elde edilir eğer GONE her görünürlük kurdum

Picasso.with(context) 
    .load(youtubeThumbnailUrl) 
    .fit() 
    .centerCrop() 
    .into(
     ((ObjectViewHolder) holder).userPostYoutubeImage 
    ); 

Ama her nasılsa görüntü hala önceki öğelerde yeniden kullanılır (evet, sadece Ürün no 1 değil). Bazen görüntü de yanlış ImageView bulunmaktadır. Görüntü D'nin ImageView D olması gerekiyordu, ancak bunun yerine ImageView A.

RecyclerView ayarını yapmak ve güzelce gitmek için herhangi bir kılavuz var mı? Bir şey kaçırdım, ya da daha kod tedarik etmek gerekirse

, bana bilgi lütfen: D

cevap

6

Sen de else koşul koymak gerekir. Aşağıdaki örnekte olduğu gibi.

// if no url is found from server 
if(url == null){ 
    ((ObjectViewHolder) holder).userPostImageWrapper.setVisibility(View.GONE); 
    ((ObjectViewHolder) holder).userPostYoutubeImageWrapper.setVisibility(View.GONE); 

} else { 
    // Some url has found 
    ((ObjectViewHolder) holder).userPostImageWrapper.setVisibility(View.VISIBLE); 
    ((ObjectViewHolder) holder).userPostYoutubeImageWrapper.setVisibility(View.VISIBLE); 
} 

çalışma zamanında kendi görünürlük ayarını ediyoruz size durumunda liste öğesi olarak orada var öğelerinin her biri için yapın.

+3

Bunun neden önemli olduğunu söylemeye değer olabilir. Sahiplerin tekrar kullanılma nedeni. – Knossos

+0

Sadece zihnimi tokatladım. Teşekkürler Reaz bana başkalarını kullanmayı söylediler ve Teşekkürler! Yani tutucu numarasının içindeki görüş açısı .. 3 örneğin, 1 numaralı numaraya geçsek bile hala var mı? –

+0

@Knossos Eklediğiniz için çok teşekkürler. Evet, paylaşmaya değer. –

İlgili konular