2016-04-28 10 views
6

Gibt es eine Möglichkeit, Teiler nach einer Fußzeile in einem Recyclerview zu entfernen. Ich verwende Element Dekoration, um Teiler zum Adapter hinzuzufügen. Ich füge Fußzeile in der adapter.divider ist unterhalb der angezeigt Fußzeile auch. Ich möchte es entfernen.Entfernen von Teiler nach einer Fußzeile in einem Recyclerview

Dies ist mein Code für Divider

public class DividerItemDecoration extends RecyclerView.ItemDecoration { 

private static final int[] ATTRS = new int[]{ 
     android.R.attr.listDivider 
}; 

public static final int HORIZONTAL_LIST = LinearLayoutManager.HORIZONTAL; 

public static final int VERTICAL_LIST = LinearLayoutManager.VERTICAL; 

private Drawable mDivider; 

private int mOrientation; 

public DividerItemDecoration(Context context, int orientation) { 
    final TypedArray a = context.obtainStyledAttributes(ATTRS); 
    mDivider = a.getDrawable(0); 
    a.recycle(); 
    setOrientation(orientation); 
} 

public void setOrientation(int orientation) { 
    if (orientation != HORIZONTAL_LIST && orientation != VERTICAL_LIST) { 
     throw new IllegalArgumentException("invalid orientation"); 
    } 
    mOrientation = orientation; 
} 

@Override 
public void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state) { 
    if (mOrientation == VERTICAL_LIST) { 
     drawVertical(c, parent); 
    } else { 
     drawHorizontal(c, parent); 
    } 
} 

public void drawVertical(Canvas c, RecyclerView parent) { 
    final int left = parent.getPaddingLeft(); 
    final int right = parent.getWidth() - parent.getPaddingRight(); 

    final int childCount = parent.getChildCount(); 
    for (int i = 0; i < childCount; i++) { 
     final View child = parent.getChildAt(i); 
     final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child 
       .getLayoutParams(); 
     final int top = child.getBottom() + params.bottomMargin; 
     final int bottom = top + mDivider.getIntrinsicHeight(); 
     mDivider.setBounds(left, top, right, bottom); 
     mDivider.draw(c); 
    } 
} 

public void drawHorizontal(Canvas c, RecyclerView parent) { 
    final int top = parent.getPaddingTop(); 
    final int bottom = parent.getHeight() - parent.getPaddingBottom(); 

    final int childCount = parent.getChildCount(); 
    for (int i = 0; i < childCount; i++) { 
     final View child = parent.getChildAt(i); 
     final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child 
       .getLayoutParams(); 
     final int left = child.getRight() + params.rightMargin; 
     final int right = left + mDivider.getIntrinsicHeight(); 
     mDivider.setBounds(left, top, right, bottom); 
     mDivider.draw(c); 
    } 
} 

@Override 
public void getItemOffsets(Rect rect, View view, RecyclerView parent, RecyclerView.State state) { 
    if (Orientation == VERTICAL_LIST) { 
     rect.set(0, 0, 0, Divider.getIntrinsicHeight()); 
    } else { 
     rect.set(0, 0, Divider.getIntrinsicWidth(), 0); 
    }} 
+0

Zeigen Sie Ihren Code. –

+0

@vabhivab hier ist mein Code –

Antwort

0

Sie haben eine Kontrolle über getItemOffsets() Methode hinzufügen:

@Override 
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) { 
    if (parent.getChildAdapterPosition(view) != parent.getAdapter().getItemCount() - 1) { 
     // set the rect's size 
    } 
} 

Sie ein Beispiel für diese Implementierung auf meine RecyclerViewDivider Bibliothek auf Github

finden

Oder Sie können es einfach als Gradle Abhängigkeit hinzufügen und überprüfen Sie die Javadoc:

dependencies { 
    ... 
    compile 'com.github.fondesa:recycler-view-divider:1.1.3' 
} 

und Verwendung:

RecyclerViewDivider.with(context) 
     .addTo(recyclerView) 
     .visibilityFactory(new VisibilityFactory() { 
      @Override 
      public boolean displayDividerForItem(int listSize, int position) { 
       return position != listSize - 1; 
      } 
     }) 
     .build() 
     .attach() 
Verwandte Themen