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
tag onRecyclerView 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();
С этим вы можете добавить пробел на первом и последнем дитя твое!--4-->.
теперь, меняя код для этого подхода, вы получаете:
@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