2016-11-17 12 views
0

RecyclerViewを使用してTextViewのリストを表示しています。私は位置0,1,2,3と4のTextViewsに色のついた四角形をつけたい。RecyclerViewアダプタのメソッドholder.getAdapterPosition()はスクロール後に間違った値を取得します

@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

enter image description here

問題は、私は他のTextViewsを下にスクロールするときにも色を持っているということですLog.e( "test"、getAdapterPosition())を使用して位置を確認し、期待値、つまりArrayList内の項目の位置を示しました。私の携帯電話で

それが次のパターンは以下:無色5色、10無色、5色、10 ...

私は大きな画面とパターンの変更と他の携帯電話にアプリをテストしてみた、5無色13色、無色13色、無色13色...

だから、画面に表示できる項目の数は問題に関係していると思います。

PS:既に位置パラメータを使用してみました。

お勧めはありますか?

+0

あなたは 'getLayoutPosition()'を使ってみましたか? –

+0

これを試してくださいgetOldPosition() –

+0

ありがとうございますが、それらのメソッドは動作しませんでした – ChocoboGordo

答えて

1

はい、あなたは正しいです!アダプターの位置はアダプターの性質上リサイクルされます。

あなたのできることは、あなたのモデルで1つの変数をとり、colourIdと言うことです。リストに追加するときに値を割り当てます。たとえば、colourId = 1,2,3と言ってください。

mValues.get(position).getCoulourId(); 

以下のようにその値にあなたの条件場合に適用よりも、アダプタにその値を取得します。

+0

ありがとう!出来た。しかし、私はまだ位置がログメッセージでは正しいが、if条件では正しいとは思っていません – ChocoboGordo

関連する問題