Как добавить поля в 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 ...
}