Ich muss ein Trennzeichen nur zum absoluten ersten Element meiner Recyclingansicht hinzufügen.Dekorieren Sie nur das absolut erste Element von RecyclerView
Ich habe bereits How to selectively decorate RecyclerView items, und ich verstehe, dass
Die (OnDraw) -Methode zur Zeit alle untergeordneten Ansichten Schleifen über im RecyclerView auf dem Bildschirm sichtbar.
und mein Problem ist genau das. da es jedes Mal ausgeführt wird, wenn sich die Ansichten in der RecycleView ändern, auch wenn ich nur den ersten Gegenstand, finde und dekoriere, sobald ich nach unten scrolle, verschiebt sich die Dekoration zum aktuellen ersten Gegenstand.
In diesem Link erfolgt die Auswahl durch die Methode isDecorated
, die die Instanz des ViewHolder des aktuellen Kindes betrachtet. Meine Vermutung ist, dass der Mann in Bezug auf die ViewHolder Art dekorieren wollte, das ist nicht mein Problem, da ich nur eine Art von Element in meinem RecyclerView haben
Das ist mein DividerItemDecoration.java
public class DividerItemDecoration extends RecyclerView.ItemDecoration {
private Drawable mDivider;
public DividerItemDecoration(Drawable divider) {
mDivider = divider;
}
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
super.getItemOffsets(outRect, view, parent, state);
RecyclerView.ViewHolder holder = parent.getChildViewHolder(view);
if (parent.getChildAdapterPosition(view) == 1) {
outRect.top = outRect.top + mDivider.getIntrinsicHeight();
}
return;
}
@Override
public void onDraw(Canvas canvas, RecyclerView parent, RecyclerView.State state) {
int dividerLeft = parent.getPaddingLeft();
int dividerRight = parent.getWidth() - parent.getPaddingRight();
int childCount = parent.getChildCount();
for (int i = 0; i < childCount - 1; i++) {
if(i==0){
View child = parent.getChildAt(i);
RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams();
int dividerTop = child.getBottom() + params.bottomMargin;
int dividerBottom = dividerTop + mDivider.getIntrinsicHeight();
mDivider.setBounds(dividerLeft, dividerTop, dividerRight, dividerBottom);
mDivider.draw(canvas);
}
}
}
}
Bitte beachten Sie, dass Ich habe den ganzen Tag gesucht und konnte nur Beispiele und Gist finden, Dekorator zu jedem Element hinzufügen, um es basierend auf dem Typ selektiv hinzuzufügen, aber nichts wirklich mit der absoluten Position anzugehen. Auch bitte keine Bibliotheken wie https://github.com/yqritc/RecyclerView-FlexibleDivider, möchte ich lernen, nicht zu kopieren.
Sie haben 'parent.getChildAdapterPosition()' Methode, so ziehen Sie Ihre "Teiler" innen 'onDraw' nur, wenn diese Methode gibt 1 – pskink
Dank dieser tatsächlich funktioniert! Lustigerweise benutzte ich diese Methode in 'getItemOffset' und dachte nicht daran, sie in 'onDraw' wiederzuverwenden. Leider bekomme ich seltsame Artefakte, wenn ich die Aktivität wechsle (indem ich auf den Zeileneintrag klicke) und zurück gehe. Der Teiler bewegt sich leicht. Woher? – MaX