如何在RecyclerView Adapter中隐藏页脚?

时间:2018-09-29 09:42:50

标签: android android-recyclerview kotlin

我想将带有空白布局的页脚添加到recyclerView的底部,仅当某些视图在屏幕上可见时才显示(在我的情况下为FabButton)。 FabButton与我的上一个RecyclerView项重叠,因此,如果此FabButton可见,我想在recyclerview的底部添加空白页脚。

页脚适配器内的ViewHolder:

inner class FooterViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView)

在onBindViewHolder内部:

... ViewHolder above is for items.
else if(holder is FooterViewHolder){
            if (parentFragment.isFabButtonVisible()){
                holder.itemView.visibility = View.VISIBLE
            } else {
                holder.itemView.visibility = View.GONE
            }
        }

这部分代码正在工作(也可以正确执行分支),但是我的页脚视图在屏幕上始终可见。即使我仅添加View.GONE,它仍然可见。

父活动的XML:

<android.support.design.widget.CoordinatorLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:background="@color/splash_white"
        android:layout_weight="1"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        >

        <com.app.TabLayoutEntity.CustomViewPager
            android:id="@+id/fragmentViewPager"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_marginTop="0dp"
            android:background="@color/splash_white"
            tools:layout_editor_absoluteY="-2dp" />

        <ImageButton
            android:id="@+id/fabButton"
            android:layout_width="56dp"
            android:layout_height="56dp"
            android:layout_gravity="bottom|end"
            android:layout_margin="@dimen/fab_margin"
            android:background="@drawable/fab_gradient"
            android:clickable="true"
            android:scaleType="fitCenter"
            android:adjustViewBounds="true"
            android:padding="8dp"
            android:elevation="8dp"
            android:shape="oval"
            android:src="@drawable/ico_fab" />
    </android.support.design.widget.CoordinatorLayout>

片段XML(在ViewPager内部):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:clipToPadding="true"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v7.widget.RecyclerView
        android:id="@+id/itemRecyclerView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@drawable/recyclerview_corners"
        android:clipToPadding="false"
        android:scrollbars="vertical"
        android:paddingBottom="0dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</LinearLayout>

2 个答案:

答案 0 :(得分:3)

如果您只是想避免最后一个项目和Fab重叠,那么您应该在recyclerview和父级布局xml的简单更改下面进行此操作

<android.support.v7.widget.RecyclerView
android:clipToPadding="false"
android:paddingBottom="paddingindp"/>// for example You can add 100dp and test

并在父版式上将此内容添加到以下行

android:clipToPadding="true"

这将使您的recyclerview在该Fab上滚动,并且不需要添加页脚视图

希望这项工作能满足您的要求。

答案 1 :(得分:1)

您可以使用getItemCount()方法添加条件,因为如果添加页脚,则需要增加列表大小

就像

override fun getItemCount(): Int {
   if (parentFragment.isFabButtonVisible()){
          return mModels.size + 1
   } else {
          return mModels.size
   }
}