2016-04-28 10 views
6

Czy istnieje sposób na usunięcie dzielnika po stopce w Recyclerview. Używam dekoracji elementu do dodawania dzielnika do adaptera. Dodaję stopkę w adapterze adapter.divider footer also.i chcesz go usunąć.Usuwanie dzielnika po stopce w widoku Recycler

To jest mój kod 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

Pokaż swój kod. –

+0

@vabhivab tutaj jest mój kod –

Odpowiedz

0

Trzeba dodać czek na getItemOffsets() metody:

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

można znaleźć przykładowe tej realizacji na moim RecyclerViewDivider biblioteki na Github

Lub możesz po prostu dodać go jako zależność Gradle i sprawdzić javadoc:

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

i zastosowanie:

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