在滚动后,RecyclerView适配器的方法holder.getAdapterPosition()获取错误的值

时间:2016-11-17 12:42:23

标签: android android-recyclerview recycler-adapter

我正在使用RecyclerView来显示TextView列表。我希望位置0,1,2,3和4中的TextView具有彩色方块。这是我的代码:

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

        holder.mItem = mValues.get(position);

        if(holder.getAdapterPosition()==0) {

            holder.lytColor.setBackgroundColor(Color.rgb(255, 201, 8));

        } else if(holder.getAdapterPosition()==1) {

                holder.lytColor.setBackgroundColor(Color.rgb(242, 157, 32));

        }else if(holder.getAdapterPosition()==2) {
            holder.lytColor.setBackgroundColor(Color.rgb(177, 134, 66));

        }else if(holder.getAdapterPosition()==3) {

            holder.lytColor.setBackgroundColor(Color.rgb(123, 102, 72));

        }else if(holder.getAdapterPosition()==4){
                holder.lytColor.setBackgroundColor(Color.rgb(77,72,69)); 

        }
   }

有效:

enter image description here

问题是当我向下滚动其他TextView时也有颜色:

enter image description here

我已经使用Log.e(“test”,getAdapterPosition())来查看位置,它显示了期望值,即项目在ArrayList中的位置。

在我的手机中它遵循下一个模式:5色,10无色,5色,10无色......

我已经在其他手机中测试了应用程序,屏幕更大,图案更改,5色,13无色,5色,13无色......

所以我假设可以在屏幕上显示的项目数量与问题有关。

PS:我已经尝试过使用位置参数

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

是的,你是对的!适配器中的位置将以适配器的性质回收它。

你可以做的是在模型中使用一个变量,让我们说colourId。在添加到列表时为其分配值。比方说colourId = 1,2,3等等。

并在适配器中获取该值,如下所示

mValues.get(position).getCoulourId();

比在该值上应用if条件。