这是我的方案
我是使用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);
}
}
}
});
我有
LinearLayoutManager
与Horizontal Orientation
我正在以下列方式在position
上添加RecyclerView Adapter
标记
@Override
public void onBindViewHolder(BreadCrumbViewHolder holder, int position) {
holder.setPosition(position);
}
是否有其他方法可以RecyclerView
访问ItemDecoration
上的第一个和最后一个孩子,以便以后删除和添加项目不会有任何问题。
答案 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