我有一个问题:RecyclerView在滚动时显示错误的数据

时间:2018-10-26 07:00:22

标签: android

1。我有一个问题:RecyclerView在滚动时显示错误数据,我把if-    onBindViewHolder()中的else条件,用于在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());
            }  
   }

谢谢。

4 个答案:

答案 0 :(得分:1)

我想您看到的项目本来就不应该带有说明。

这是回收者视图的性质。顾名思义,您必须回收您的物品。基本上,已经使用过的项目将被重用。在您的情况下,如果某件商品有描述,而现在却没有,那么您也需要清理它:

@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("");
   }
}

如您所见,这样,每个人都不需要对项目进行描述,就可以对其进行清理。

答案 1 :(得分:1)

看起来像您缺少重写某些方法。您需要覆盖以下方法。

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

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

答案 2 :(得分:0)

尝试

    @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);
           }
   }

答案 3 :(得分:0)

如果从API中获取“ hasDescription”,请执行以下操作:

 @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());
            }  
   }