5

ich recyclerView bin mit und Glide eine horizontale Galerie zu implementieren, und hier ist der Hauptcode:RecyclerView + Glide zeigt das Ergebnis in ein Chaos

@Override 
public void onBindViewHolder(ViewHolder holder, final int position) { 
    if (mListener != null) { 
     holder.mImageView.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       mListener.onListItemClick(v, position); 
      } 
     }); 
    } 
    Firmware.VideoModel videoModel = mDataList.get(position); 
    String url = videoModel.getPreurl(); 
    if (position == 0) { 
     holder.mImageView.setPadding(mCtx.getResources().getDimensionPixelOffset(R.dimen.activity_horizontal_margin) - mCtx.getResources().getDimensionPixelOffset(R.dimen.image_margin), holder.mImageView.getPaddingTop(), holder.mImageView.getPaddingRight(), holder.mImageView.getPaddingBottom()); 
    } else if (mDataList != null && position == mDataList.size() - 1) { 
     holder.mImageView.setPadding(holder.mImageView.getPaddingLeft(), holder.mImageView.getPaddingTop(), mCtx.getResources().getDimensionPixelOffset(R.dimen.activity_horizontal_margin), holder.mImageView.getPaddingBottom()); 
    } 
    if (mDataList != null && mDataList.size() >= 0) { 
     Glide.with(mCtx).load(url).placeholder(R.drawable.image_placeholder).error(R.drawable.image_placeholder).into(holder.mImageView); 
     if (videoModel.isVideo()) { 
      holder.mImageButton.setVisibility(View.VISIBLE); 
     } else { 
      holder.mImageButton.setVisibility(View.GONE); 
     } 
    } 
} 

Ich habe versucht, einen Raum Polsterung auf den ersten gesetzt und die Letztes Bild, damit ich wie bei Google Play alle Bilder in den Bildschirmrand scrollen kann.

Leider ist hier das Problem:

Als recyclerView wird Ansichten recyceln die sind nicht im sichtbaren Bereich, die Polsterungen I gesetzt wird in ein Chaos sein, wie ich scrollen diese recyclerView links und rechts. Die Polsterung wird mit dem zweiten hinzugefügt werden, auch dem dritten oder jedem anderen Bild, wenn nach Ansicht der Position zurückgeführt wurde ...

Ich habe die Antwort stackoverflowd, ist einer von ihnen zu nennen:

holder.setIsRecyclable(false) 

Das funktioniert wirklich. Aber das wird sinnlos sein, um ein RecyclerView richtig zu benutzen? Also ich hoffe, dass mir jemand helfen kann. Danke.

+0

Ich habe ein ähnliches Problem mit Glide, aber ich ändere weder Padding noch irgendwas mit Views. Es ist in der Tat ein Durcheinander. –

Antwort

0

Sie sollten die Auffüllung nicht dynamisch ändern, stattdessen sollten Sie einige verschiedene Arten von ViewHolders (mit verschiedenen Layouts) oder benutzerdefinierten LayoutManager für Ihre Bedürfnisse verwenden.