Android java. Проблема при скроле

226
16 января 2018, 12:55

Всем доброго времени суток. Вывожу список постов через RecyclerView, и при быстром скроле вниз или вверх, миниатюры постов путаются между собой.

т.е. у первого поста одна картинка, у последнего другая, и при быстром скроле, они могут меняться местами.

Я в этом новичек, может проблема и бональная, но я не нашел решение на страницах гугла.

Вот адаптер:

 package pro.shever.storage_t.posts;
/**
 * Created by Anton on 13.01.2018.
 */
//import android.support.v7.widget.CardView;
import android.content.Context;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import com.squareup.picasso.Picasso;
import java.util.List;
import pro.shever.storage_t.R;
public class RVAdapter extends RecyclerView.Adapter<RVAdapter.PostsViewHolder> {
    Context context;
    public static class PostsViewHolder extends RecyclerView.ViewHolder {
//        CardView cv;
        TextView postsName;
        TextView postsText;
        ImageView postsImage;

        PostsViewHolder(View itemView) {
            super(itemView);
//            cv = (CardView)itemView.findViewById(R.id.cv);
            postsName = (TextView)itemView.findViewById(R.id.name);
            postsText = (TextView)itemView.findViewById(R.id.text);
            postsImage = (ImageView)itemView.findViewById(R.id.image);
        }
    }
    List<Posts> posts;
    RVAdapter(List<Posts> posts){
        this.posts = posts;
    }
    @Override
    public void onAttachedToRecyclerView(RecyclerView recyclerView) {
        super.onAttachedToRecyclerView(recyclerView);
    }
    @Override
    public PostsViewHolder onCreateViewHolder(ViewGroup viewGroup, int i) {
        View v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.post_item, viewGroup, false);
        PostsViewHolder pvh = new PostsViewHolder(v);
        return pvh;
    }
    @Override
    public void onBindViewHolder(PostsViewHolder postsViewHolder, int i) {
        postsViewHolder.postsName.setText(posts.get(i).name);
        postsViewHolder.postsText.setText(posts.get(i).text);
        Picasso.with(this.context).load(posts.get(i).image).into(postsViewHolder.postsImage);
    }
    @Override
    public int getItemCount() {
        return posts.size();
    }
}
Answer 1

В ReciclerView элементы пере используются, перемещаясь в в пул объектов RecycledViewPool. Пока picasso не загрузит новое изображение - в элементе используется предыдущее изображение. Попробуйте сбрасывать загрузку изображения Picasso.with(this.context).cancelRequest(PostsViewHolder.postsImage).load... Так по идее должен сначала появиться placeholder, а потом начнется загрузка нового изображения

Answer 2

Спасибо за помощь, нашел ошибку. Передавал не тот context в Picaso. было:

Picasso.with(this.context)...

надо:

Picasso.with(postsViewHolder.postsImage.getContext())...
READ ALSO
Видимость Button&#39;a при написании текста в editText

Видимость Button'a при написании текста в editText

Когда я пишу текст в EditText(multiline) - проподают кнопки ,но после окончания писания кнопки снова появляются

223
Как парсить в данной ситуации? Jsoup

Как парсить в данной ситуации? Jsoup

Делаю парсинг с помощью JsoupЕсть блоки сайта, из которых нужн вытащить данные

173
Spring + Jsf Актуально ли?

Spring + Jsf Актуально ли?

Добрый деньВот начинаем старые проекты переносить на новые технологии и выбераем технолонический стэк

210
Помогите разобраться с фильтром

Помогите разобраться с фильтром

Есть некая БД в которой лежат комнаты и мне надо выбрать комнаты подходящие по условиям фильтраВ классе Filter поля по которым ведётся сравнение

228