2016-11-17 3 views
0

Ich benutze eine RecyclerView, um eine Liste von TextViews anzuzeigen. Ich möchte, dass die TextViews in den Positionen 0,1,2,3 und 4 ein farbiges Quadrat haben. Dies ist mein Code:RecyclerView-Adapter Methode holder.getAdapterPosition() bekomme falsche Werte nach dem Scrollen

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

     } 
    } 

Es funktioniert:

enter image description here

Das Problem ist, dass, wenn ich andere Textviews nach unten scrollen auch Farben haben:

enter image description here

Ich habe verwendet Log.e ("test", getAdapterPosition()), um die Position zu sehen, und es zeigte den erwarteten Wert, die Position des Elements in der ArrayList.

In meinem Handy folgt das nächste Muster: 5 farbigen, 10 farblos, 5 farbig, 10 farblos ...

ich die App in anderen Mobiltelefonen mit einem größeren Bildschirm und die Muster ändern, getestet habe 5 farbig, 13 farblos, 5 farbig, 13 farblos ...

Also ich nehme an, dass die Anzahl der Elemente, die auf dem Bildschirm angezeigt werden kann, mit dem Problem zusammenhängt.

PS: Ich habe versucht, bereits Positionsparameter mit

Irgendwelche Vorschläge?

+0

haben Sie versucht, 'getLayoutPosition()' zu verwenden? –

+0

versuchen Sie diese GetOldPosition() –

+0

Danke, aber diese Methoden haben nicht funktioniert – ChocoboGordo

Antwort

1

Ja, Sie haben Recht! Die Position im Adapter wird recycelt und liegt in der Natur des Adapters.

Was Sie tun können, ist eine Variable in Ihrem Modell zu nehmen sagen wir ColourId. Weisen Sie dann den Wert zu, wenn Sie der Liste hinzufügen. Sagen Sie zum Beispiel colourId = 1,2,3 und so weiter.

und erhalten diesen Wert in den Adapter wie unten

mValues.get(position).getCoulourId(); 

als Ihre, wenn die Bedingungen auf diesem Wert übernehmen.

+0

Vielen Dank! Es funktionierte. Aber ich frage mich immer noch, warum die Position in der Protokollnachricht korrekt ist, aber nicht in den if-Bedingungen – ChocoboGordo

Verwandte Themen