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 on 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();

С этим вы можете добавить пробел на первом и последнем дитя твое!--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