@pavelg777

Как сделать подгружаемый RecyclerView на android?

Здравствуйте, у меня возникла проблема с подгружаемым списком RecyclerView. При подгрузке происходит дублирование картинок из начала списка, а при прокрутке вверх все изображения сбиваются
  • Вопрос задан
  • 1990 просмотров
Решения вопроса 1
orcDamnar
@orcDamnar
Java, C/C++, Android SDK
А можно пример кода из адаптера. Вообще, подозреваю, что картинки в список вы загружаете асинхронно, и в момент вставки никак не проверяете, что в целевой ImageView необходимо вставить именно эту картинку. Я проверяю по урлу на картинку. В начале загрузки в onBind просто когда начинаю грузить картинку ставлю mImageView.setTag(R.id.target_url, url) и когда готов вставить уже то проверяю на соответствие урлов.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@pavelg777 Автор вопроса
Я попробовал перед загрузкой очистить вьюшку, и всё вроде работает но не очень красиво смотриться, когда при очередной прокрутке изображения заново появляются.
Вот код адаптера:
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {

        public class ViewHolder extends RecyclerView.ViewHolder {
            public ImageView userPhoto;
            public TextView name;
            public TextView date;
            private ImageView image;
            public TextView text;
            public TextView likeCount;
            public TextView commCount;

            public ViewHolder(View v) {
                super(v);
                userPhoto = (ImageView)v.findViewById(R.id.userPhoto);
                name = (TextView)v.findViewById(R.id.name);
                date = (TextView)v.findViewById(R.id.date);
                image = (ImageView)v.findViewById(R.id.image);
                text = (TextView)v.findViewById(R.id.text);
                likeCount = (TextView)v.findViewById(R.id.likeCount);
                commCount = (TextView)v.findViewById(R.id.commentCount);
            }
        }

        @Override
        public MyAdapter.ViewHolder onCreateViewHolder(ViewGroup parent,
                                                       int viewType) {
            View v = LayoutInflater.from(parent.getContext())
                    .inflate(R.layout.photo_card_item, parent, false);
            ViewHolder vh = new ViewHolder(v);
            return vh;
        }

        @Override
        public void onBindViewHolder(ViewHolder holder, int position) {

            PhotoLab photoLab = photoLabs.get(position);

            imageLoader.displayImage(photoLab.getProfilePhoto(), holder.userPhoto, options);
            holder.name.setText(photoLab.getfName() + " " + photoLab.getlName());

            Calendar c = Calendar.getInstance();
            c.setTimeInMillis(photoLab.getDate() * 1000);

            holder.date.setText(
                    c.get(Calendar.DAY_OF_MONTH) + "." +
                            (c.get(Calendar.MONTH) + 1) + "." +
                            c.get(Calendar.YEAR) + " " +
                            c.get(Calendar.HOUR) + ":" +
                            c.get(Calendar.MINUTE)
            );
            PhotoResource photoResource = photoLab.getPhotos().get(0);
            //if(holder.image.getDrawable() == null){
                holder.image.setImageResource(0); // обнуляю перед загрузкой
                imageLoader.getInstance().displayImage(photoResource.getPhoto(), holder.image); //это проблемная вьюшка
            //}
            holder.text.setText(photoResource.getText());
            holder.likeCount.setText(""+photoResource.getLikes());
            holder.commCount.setText(""+photoResource.getComments());

        }

        @Override
        public int getItemCount() {
            return photoLabs.size();
        }

    }
Ответ написан
Комментировать
@Tiberal
замените UniversalImageLoader на glide, там получше отображение в RecyclerView
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы