Android RecyclerView查找ItemDecoration的第一个和最后一个视图

时间:2015-04-16 06:10:10

标签: android android-recyclerview

这是我的方案

  • 我必须在Recycler View的第一项和最后一项上添加空格
  • 我是使用ItemDecoration

    这样做的
     recyclerView.addItemDecoration(new RecyclerView.ItemDecoration() {
    
    
        @Override
        public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
            int totalHeight = parent.getHeight();
            int viewHeight = getResources().getDimensionPixelOffset(R.dimen.breadcrumb_btn_height);
            int padding = (totalHeight - viewHeight) / 2;
            //to position view on middle
            if (view.getTag() instanceof Integer) {
                int position = (int) view.getTag();
                if (position == 0) {
                    //first position
                    outRect.set(padding, padding, 0, padding);
                } else if (position == linearLayoutManager.getItemCount() - 1)   {
                    //last position
                    outRect.set(0, padding, padding, padding);
                } else {
                    outRect.set(0, padding, 0, padding);
                }
            }
    
    
        }
    });
    

    我有

  • LinearLayoutManagerHorizontal Orientation

    我正在以下列方式在position上添加RecyclerView Adapter标记

    @Override
    public void onBindViewHolder(BreadCrumbViewHolder holder, int position) {
    holder.setPosition(position);
    }
    

    是否有其他方法可以RecyclerView访问ItemDecoration上的第一个和最后一个孩子,以便以后删除和添加项目不会有任何问题。

1 个答案:

答案 0 :(得分:40)

  

有没有其他方法可以访问RecyclerView的第一个和最后一个孩子   ItemDecoration以便以后删除和添加项目不会有   任何问题。

是。只有实现自己的ItemDecoration

,您才能实现自己想要的目标

获取当前项目/孩子的位置:

int position = parent.getChildAdapterPosition(view);

获取物品/儿童的数量:

int itemCount = state.getItemCount();

通过此操作,您可以在RecyclerView的第一个和最后一个孩子上添加空格

现在更改此方法的代码:

@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
    super.getItemOffsets(outRect, view, parent, state);

    //your padding...

    final int itemPosition = parent.getChildAdapterPosition(view);
    if (itemPosition == RecyclerView.NO_POSITION) {
        return;
    }

    final int itemCount = state.getItemCount();

    /** first position */
    if (itemPosition == 0) {
        outRect.set(padding, padding, 0, padding);
    }
    /** last position */
    else if (itemCount > 0 && itemPosition == itemCount - 1) {
        outRect.set(0, padding, padding, padding);
    }
    /** positions between first and last */
    else {
        outRect.set(0, padding, 0, padding);
    }
}

加分:如果您想为RecyclerView的所有项目添加填充,请查看我创建的 Gist https://gist.github.com/ryanamaral/93b5bd95412baf85a81a