Android 是否可以隐藏RecyclerView中最后一个项目的项目装饰?

Android 是否可以隐藏RecyclerView中最后一个项目的项目装饰?,android,android-recyclerview,Android,Android Recyclerview,我正在使用该类在列表中创建分隔符,但我想隐藏列表中最后一项的分隔符。这是否可能,而不必自己实现分隔器?您可以尝试一下 public class SimpleDividerItemDecoration extends RecyclerView.ItemDecoration { private Drawable mDivider; public SimpleDividerItemDecoration(Context context) { mDivider = Con

我正在使用该类在列表中创建分隔符,但我想隐藏列表中最后一项的分隔符。这是否可能,而不必自己实现分隔器?

您可以尝试一下

public class SimpleDividerItemDecoration extends RecyclerView.ItemDecoration {
    private Drawable mDivider;

    public SimpleDividerItemDecoration(Context context) {
        mDivider = ContextCompat.getDrawable(context, R.drawable.line_divider);
    }

    @Override
    public void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state) {
        int left = parent.getPaddingLeft();
        int right = parent.getWidth() - parent.getPaddingRight();

        int childCount = parent.getAdapter().getItemCount();
        for (int i = 0; i < childCount; i++) {

            if (i == (childCount - 1)) {
                continue;
            }

            View child = parent.getChildAt(i);

            RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams();

            int top = child.getBottom() + params.bottomMargin;
            int bottom = top + mDivider.getIntrinsicHeight();

            mDivider.setBounds(left, top, right, bottom);
            mDivider.draw(c);
        }
    }
}
公共类SimpleDividerItemDecoration扩展了RecyclerView.ItemDecoration{
专用可抽出式mDivider;
公共SimpleDividerItemDecoration(上下文){
mDivider=ContextCompat.getDrawable(context,R.drawable.line\u分隔符);
}
@凌驾
公共void onDrawOver(画布c、RecyclerView父级、RecyclerView.State){
int left=parent.getPaddingLeft();
int right=parent.getWidth()-parent.getPaddingRight();
int childCount=parent.getAdapter().getItemCount();
for(int i=0;i
line\u divider.xml:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle">
    <size
        android:width="1dp"
        android:height="1dp" />
    <solid android:color="#F5F5F5" />
</shape>

[更新]
您可以简单地复制或扩展DividerItemDecoration类,并通过修改


for(int i=0;i
to
for(int i=0;i
试试科特林版本,灵感来自@Muthukrishnan Rajendran

class CommentDetailItemDecoration(
        context: Context
) : RecyclerView.ItemDecoration() {
    val drawable: Drawable = ContextCompat.getDrawable(context, R.drawable.ft_item_divider)!!

    override fun onDrawOver(c: Canvas, parent: RecyclerView, state: RecyclerView.State) {
        val left = parent.paddingLeft
        val right = parent.width - parent.paddingRight

        val childCount = parent.adapter!!.itemCount
        for (i in 0 until childCount - 1) {
            val child = parent.getChildAt(i)
            if (child != null) {
                val params = child.layoutParams as RecyclerView.LayoutParams
                val top = child.bottom + params.bottomMargin
                val bottom = top + drawable.intrinsicHeight
                drawable.setBounds(left, top, right, bottom)
                drawable.draw(c)
            }
        }
    }
}

不可以,但是你可以复制源代码并进行调整,或者只是滚动你自己的源代码。不幸的是,这不起作用。事实上,有一个问题让我觉得很奇怪。这似乎是正确的方法,但我需要找出代码中的其他错误。谢谢这是错误的答案
childCount-1
将为您提供最后一个可见子项的索引。正确的比较应该是:
parent.getChildAdapterPosition(child)==parent.getAdapter().getItemCount()-1
,如@Maxim的答案所述Turaev@Stanislav是的,这根本不起作用。在项目之间滚动时,
parent.getChildCount()
将随着列表的填充而增加,因为它表示当前显示的项目数;因此,当向下滚动列表并增加子项计数时,预期最后一项的项装饰将应用于每个项。我建议使用
getAdapter().getItemCount()
对答案进行编辑,这就解决了问题。