Как добавить поля в RecyclerView для последнего элемента?

Я несколько экранов, которые используют RecyclerView, а также имеет небольшой Fragment, который находится поверх RecyclerView. Когда отображается это Fragment, я хотел бы убедиться, что могу прокручивать нижнюю часть RecyclerView. Fragment не всегда отображается. Если бы я использовал поля на RecyclerView, мне нужно было бы динамически удалить и добавить их, когда будет отображаться Fragment. Я мог бы добавить поля в последний элемент в списке, но это тоже сложно, и если я загружу больше вещей позже (например, разбивка на страницы), мне придется снова отменить эти поля.

Как бы я динамически добавлял или удалял поля в представлении? Какие еще варианты можно решить?

Ответ 1

Итак, если вы хотите добавить прописку внизу вашего RecyclerView, вы можете установить для параметра paddingBottom, а затем clipToPadding значение false. Вот пример

<android.support.v7.widget.RecyclerView
    android:id="@+id/my_list"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:clipToPadding="false"
    android:paddingBottom="100dp" />

Ответ 2

Вы должны использовать Item Decorator.

public class MyItemDecoration extends RecyclerView.ItemDecoration {

    @Override
    public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) {
        // only for the last one
        if (parent.getChildAdapterPosition(view) == parent.getAdapter().getItemCount() - 1) {
            outRect.top = /* set your margin here */;
        }
    }
}

Ответ 3

Я использую это в kotlin для предоставления поля для последнего индекса RecyclerView

override fun onBindViewHolder(holder: RecyclerView.ViewHolder(view), position: Int) {
    if (position == itemsList.lastIndex){
        val params = holder.itemView.layoutParams as FrameLayout.LayoutParams
        params.bottomMargin = 100
        holder.itemView.layoutParams = params
    }else{
        val params = holder.itemView.layoutParams as RecyclerView.LayoutParams
        params.bottomMargin = 0
        holder.itemView.layoutParams = params
    }
  //other codes ...
}