laa*_*ptu 18 android android-recyclerview
这是我的情景
我正在这样做 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);
}
}
}
});
Run Code Online (Sandbox Code Playgroud)
我有
LinearLayoutManager 同 Horizontal Orientation
我正在以下列方式添加position标记RecyclerView Adapter
@Override
public void onBindViewHolder(BreadCrumbViewHolder holder, int position) {
holder.setPosition(position);
}
Run Code Online (Sandbox Code Playgroud)
有没有其他方法来访问RecyclerView第一个和最后一个孩子,ItemDecoration以便以后删除和添加项目将没有任何问题.
Rya*_*ral 46
有没有其他方法可以在ItemDecoration上访问RecyclerView的第一个和最后一个子项,以便以后删除和添加项目不会有任何问题.
是.只有实现自己的目标,才能实现自己想要的目标ItemDecoration.
获取当前项目/子项位置:
int position = parent.getChildAdapterPosition(view);
Run Code Online (Sandbox Code Playgroud)
要获得物品/孩子的数量:
int itemCount = state.getItemCount();
Run Code Online (Sandbox Code Playgroud)
有了它,你可以在你的第一个和最后一个孩子上添加一个空格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);
}
}
Run Code Online (Sandbox Code Playgroud)
额外奖励:如果您希望为RecyclerView的所有项目提供填充,请查看我创建的Gist:https://gist.github.com/ryanamaral/93b5bd95412baf85a81a