Ответ 1
сделано.
@Override
public long getItemId(int position) {
return position;
}
@Override
public int getItemViewType(int position) {
return position;
}
Что происходит:
Список (RecyclerView)
смешивает данные при прокрутке.
I.E, когда я прокручиваю резервную копию после прокрутки вниз, некоторые элементы списка повторяются, не отображая надлежащего содержимого.
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;
}
}
}
Я считаю, что, возможно, некоторые работы должны быть выполнены с процессом рециркуляции RecyclerView, но я ничего не пробовал, чтобы работать.
сделано.
@Override
public long getItemId(int position) {
return position;
}
@Override
public int getItemViewType(int position) {
return position;
}
Только две вещи в вашем адаптере RecyclerView
@Override
public long getItemId(int position) {
return position;
}
и в конструкторе адаптера
setHasStableIds(true);
Надеюсь, что это поможет!
Переопределите эти методы в своем классе адаптера следующим образом.
@Override
public long getItemId(int position) {
return position;
}
@Override
public int getItemViewType(int position) {
return position;
}
Проблема заключается в том, что объекты CardView
и TextView
объявляются static внутри FeedViewHolder
. Это означает, что все вызовы, пытающиеся установить заголовок в методе onBindViewHolder
, попали в последний раздутый вид.
Исправить это, чтобы удалить static
из cv
, title
, pubDate
, description
, а затем реализовать некоторые нестатические сеттеры, например:
public void setTitle(String s) {
title.setText(s);
}
Вызывается в методе onBindViewHolder
:
@Override
public void onBindViewHolder(RVAdapter.FeedViewHolder holder, int position) {
holder.setTitle(items.get(position).getTitle());
//...
}
У меня была та же проблема с большим обзором гридов с сотнями чисел, которые должны были появляться последовательно, но их порядок перепутывался и повторялся.
// More concise code with Kotlin expressions
override fun getItemId(position: Int) = position.toLong()
override fun getItemViewType(position: Int) = position
Добавлены вышеуказанные строки в адаптер.
В kotlin с очисткой предыдущих элементов из элемента списка LinearLayout из RecyclerView
override fun onBindViewHolder(view: MyViewHolder, index: Int) {
view.guideLinearLayout.removeAllViews()
/* do binding here*/
}
override fun getItemId(position: Int): Long {
return position.toLong()
}
override fun getItemViewType(position: Int): Int {
return position
}
Если кто-то использует kotlin, используйте как внутри RecyclerView.Adapter
SetHasStableId (true) должен применяться к адаптеру RecylerView
init {
setHasStableIds(true);
}
Переопределить позицию с идентификатором продукта
override fun getItemId(position: Int): Long {
return myList?.get(position).id
}