RecyclerView éléments en double et en constante évolution
Ce qui se Passe:
La liste (RecyclerView)
est de mélanger les données quand je scroll.
I. E quand je les faire défiler en arrière après le défilement vers le bas, certains des éléments de la liste sont répétées, pas pour afficher un contenu approprié.
package jamesnguyen.newzyv2.UI_update;
import android.content.Context;
import android.support.v7.widget.CardView;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import java.util.List;
import jamesnguyen.newzyv2.R;
import jamesnguyen.newzyv2.RSS_Processcors.RssItem;
public class RVAdapter extends RecyclerView.Adapter<RVAdapter.FeedViewHolder> {
private static List<RssItem> items = null;
private static Context context;
public RVAdapter(Context context, List<RssItem> items) {
this.items = items;
this.context = context;
}
public static List<RssItem> getItems() {
return items;
}
@Override
public RVAdapter.FeedViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.item, viewGroup, false);
return new FeedViewHolder(v);
}
@Override
public void onBindViewHolder(RVAdapter.FeedViewHolder holder, int position) {
FeedViewHolder.getTitle().setText(items.get(position).getTitle());
FeedViewHolder.getPubDate().setText(items.get(position).getPubDate());
//FeedViewHolder.getDescription().setText(items.get(position).getDescription());
}
@Override
public long getItemId(int id) {
return id;
}
@Override
public int getItemCount() {
return items.size();
}
@Override
public void onAttachedToRecyclerView(RecyclerView recyclerView) {
super.onAttachedToRecyclerView(recyclerView);
}
public static class FeedViewHolder extends RecyclerView.ViewHolder {
private static CardView cv;
private static TextView title;
private static TextView pubDate;
private static TextView description;
FeedViewHolder(View itemView) {
super(itemView);
cv = (CardView) itemView.findViewById(R.id.cv);
title = (TextView) itemView.findViewById(R.id.title);
pubDate = (TextView) itemView.findViewById(R.id.pubDate);
//description = (TextView) itemView.findViewById(R.id.description);
}
public static TextView getTitle() {
return title;
}
public static TextView getPubDate() {
return pubDate;
}
public static TextView getDescription() {
return description;
}
}
}
Je crois peut-être que certains travaux doivent être réalisés avec le procédé de recyclage de RecyclerView mais rien j'ai essayé seesm de travail.
Vous devez vous connecter pour publier un commentaire.
fait .
Que deux choses dans votre RecyclerView adaptateur
et dans le constructeur de l'adaptateur
Espère que cela aide!
Remplacer ces méthodes dans votre classe d'Adaptateur de ce genre.
Le problème est le
CardView
etTextView
objets sont déclarés statique à l'intérieur de laFeedViewHolder
. Cela signifie que tous les appels en essayant de mettre le titre dans laonBindViewHolder
méthode de frapper le dernier gonflé Vue.La solution est de supprimer le
static
decv
,title
,pubDate
,description
, puis de mettre en œuvre certaines non statique setters comme:D'être appelé dans le
onBindViewHolder
méthode:J'ai eu le même problème avec une grosse grille recyclerview avec des centaines de numéros qui devrait avoir apparu de manière séquentielle mais leur ordre était de se mêler et répété.
Ajoutée au-dessus des lignes à l'adaptateur.
Dans kotlin avec compensation de la précédente, les éléments de la LinearLayout élément de la liste à partir de la RecyclerView