在Recyclerview中删除页脚后的分隔符

时间:2016-04-28 05:54:54

标签: android android-recyclerview

有没有办法在Recyclerview中的页脚之后删除分隔符。我正在使用项目修饰将分隔符添加到适配器。我在适配器中添加页脚。在页脚下方也显示了。想要删除它。

这是我的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);
    }}

1 个答案:

答案 0 :(得分:0)

您必须在getItemOffsets()方法上添加一项检查:

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

您可以在Github

上的RecyclerViewDivider库中找到此实施的示例

或者您只需将其添加为Gradle依赖项并检查javadoc:

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

并使用:

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