2016-04-28 7 views
6

C'è un modo per rimuovere il divisore dopo un piè di pagina in un Recyclerview. Sto usando la decorazione dell'articolo per aggiungere il divisore all'adattatore. Sto aggiungendo il piè di pagina nell'adattatore. anche il piè di pagina. Voglio rimuoverlo.Rimozione del divisore dopo un piè di pagina in un Recyclerview

Questo è il mio codice per divisore

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

Mostrare il codice. –

+0

@vabhivab ecco il mio codice –

risposta

0

È necessario aggiungere un controllo sulla getItemOffsets() metodo:

@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 
    } 
} 

È possibile trovare un esempio di questa implementazione sulla mia libreria RecyclerViewDivider su Github

Oppure puoi semplicemente aggiungerlo come dipendenza Gradle e controllare javadoc:

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

E l'uso:

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