Android RecyclerView узнает первый и последний взгляд на ItemDecoration
Вот мой сценарий
- Я должен добавить место на первом и последнем элементе 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
сHorizontal Orientation
Я добавляю
position
пометить наRecyclerView Adapter
следующим образом@Override public void onBindViewHolder(BreadCrumbViewHolder holder, int position) { holder.setPosition(position); }
Есть ли другой способ доступа
RecyclerView
первый и последний ребенок наItemDecoration
так что в дальнейшем удаление и добавление элементов не будет иметь никаких проблем.
1 ответ
Есть ли какой-либо другой способ доступа к 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, взгляните на созданный мной гист: https://gist.github.com/ryanamaral/93b5bd95412baf85a81a