У меня проблема: recyclerview показывает неверные данные при прокрутке

1.У меня проблема: RecyclerView показывает неверные данные при прокрутке, я ставлю if- else условие в onBindViewHolder () для отображения текста описания в Child Элемент в определенном состоянии, он отображается впервые при заполнении списка правильно, но после прокрутки списка он отображается неправильно.

   @Override
   public void onBindViewHolder(ViewHolder holder, final int position) {
     final ContentItem content = values.get(position);
     holder.txtName.setText(content.getName());
       if( holder.txtDescription.equals("hasDescription"))
            {
                  holder.txtHeader.setText(content.getDescription());
            }  
   }

Заранее спасибо.

вы можете опубликовать свой полный код для класса адаптера?

karan 26.10.2018 09:10

if (holder.txtDescription.equals ("hasDescription")) где вы нашли это hasDescription в текстовом представлении?

Abhinav Gupta 26.10.2018 09:15
2
2
1 533
4

Ответы 4

Попробуй это

    @Override
   public void onBindViewHolder(ViewHolder holder, final int position) {
     final ContentItem content = values.get(position);
     holder.txtName.setText(content.getName());
       if( holder.txtDescription.equals("hasDescription"))
            {
                  holder.txtHeader.setText(content.getDescription());
            }  
      else{
                 holder.txtHeader.setVisibility(View.GONE);
           }
   }

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

Такова природа взглядов переработчиков. Как следует из названия, вы должны утилизировать свои предметы. В основном, предметы, которые уже были использованы, будут использоваться повторно. В вашем случае, если у предмета было описание, а теперь его не должно быть, вам также нужно это очистить:

@Override
public void onBindViewHolder(ViewHolder holder, final int position) {
   final ContentItem content = values.get(position);
   holder.txtName.setText(content.getName());
   if( holder.txtDescription.equals("hasDescription")) {
        holder.txtHeader.setText(content.getDescription());
   }  else{
        holder.txtHeader.setText("");
   }
}

Как видите, таким образом не предполагается, что у каждого элемента есть описание, вы его очищаете.

похоже, вам не хватает переопределения некоторых методов. вам нужно переопределить методы ниже.

@Override
public long getItemId(int position) {
    return position;
}

@Override
public int getItemViewType(int position) {
    return position;
}

Сделайте так, если hasDescription загружается из API:

 @Override
   public void onBindViewHolder(ViewHolder holder, final int position) {
     final ContentItem content = values.get(position);
     holder.txtName.setText(content.getName());
       if(content.getDescription.equals("hasDescription"))
            {
                  holder.txtHeader.setText(content.getDescription());
            }  
   }

Другие вопросы по теме