如何为最后一个元素为 RecyclerView 添加边距?

Posted

技术标签:

【中文标题】如何为最后一个元素为 RecyclerView 添加边距?【英文标题】:How to add margins to a RecyclerView for the last element? 【发布时间】:2016-08-28 23:05:16 【问题描述】:

我有几个使用RecyclerView 的屏幕,并且在RecyclerView 之上还有一个小的Fragment。当显示Fragment 时,我想确保我可以滚动到RecyclerView 的底部。 Fragment 并不总是显示。如果我在RecyclerView 上使用了边距,我需要在显示Fragment 时动态删除和添加它们。我可以在列表的最后一项上添加边距,但这也很复杂,如果我稍后加载更多内容(即分页),我将不得不再次剥离这些边距。

如何动态添加或删除视图的边距?还有什么其他方法可以解决这个问题?

【问题讨论】:

【参考方案1】:

因此,如果您想在 RecyclerView 的底部添加一些填充,您可以将 paddingBottom 设置为 false,然后将 clipToPadding 设置为 false。这是一个例子

<android.support.v7.widget.RecyclerView
    android:id="@+id/my_list"
    android:layout_
    android:layout_
    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 ...

【讨论】:

@Redesh 在我的情况下,它会导致 java.lang.ClassCastException: androidx.recyclerview.widget.RecyclerView$LayoutParams 不能转换为 android.widget.LinearLayout$LayoutParams 不幸的是:(

以上是关于如何为最后一个元素为 RecyclerView 添加边距?的主要内容,如果未能解决你的问题,请参考以下文章

如何为 RecyclerView 列表元素设置单击侦听器以显示 AlertDialog?

XML/android:如何为 RecyclerView 项目制作白色下划线? [复制]

如何为 recyclerView 上的两个不同事件设置监听器?

滚动时如何为 recyclerview 项目设置动画?

如何为android recyclerview中的最大字符串设置textview高度?

Android - 如何为 RecyclerView 添加点划线分隔线?