这是我的情景
- 我需要在 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);
}
}
}
});
这里我有一个
使用水平方向的LinearLayoutManager
我以以下方式在RecyclerView Adapter
中添加了position
标签
@Override
public void onBindViewHolder(BreadCrumbViewHolder holder, int position) {
holder.setPosition(position);
}
有没有其他的方式可以在 ItemDecoration
中访问 RecyclerView
的第一个和最后一个子项,以便稍后删除和添加项目时不会出现任何问题。
parent.getChildPosition(view)
而不是parent.getChildAdapterPosition(view)
。 - laaptugetChildLayoutPosition(view)
与state.getItemCount()
相结合,而不是使用getChildAdapterPosition(view)
。它们考虑了当前布局传递中的位置,这可能比适配器中的位置更旧。 - BladeCoder