Android 如何使RecyclerView标题不粘?

Android 如何使RecyclerView标题不粘?,android,android-recyclerview,Android,Android Recyclerview,我的布局如下: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"

我的布局如下:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.mkallingal.freakingnav.CardsListFragment">


    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="@color/darktext"
        android:layout_marginBottom="6dp"
        android:textAppearance="?android:attr/textAppearanceLarge"
        android:text="Cards Listing" />

    <android.support.v7.widget.RecyclerView android:layout_height="match_parent" android:layout_width="match_parent" android:id="@+id/rvCardsList"
        android:scrollbars="vertical" tools:listitem="@layout/recycler_item_layout">
    </android.support.v7.widget.RecyclerView>
</LinearLayout>

问题是TextView的顶部总是粘滞的,而RecyclerView占据了屏幕上剩余的空间。我可以水平滚动recyclerview,但文本视图就停留在那里。如何解决此问题?

您可以在recyclerView的第0个元素添加标题视图/TextView。 下面是一个很好的例子

编辑从上述链接复制源 :-

没有像listview.addHeaderView这样简单的方法,但可以通过向头的适配器添加类型来实现这一点

这里有一个例子

public class HeaderAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    private static final int TYPE_HEADER = 0;
    private static final int TYPE_ITEM = 1;
    String[] data;

    public HeaderAdapter(String[] data) {
        this.data = data;
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        if (viewType == TYPE_ITEM) {
            //inflate your layout and pass it to view holder
            return new VHItem(null);
       } else if (viewType == TYPE_HEADER) {
           //inflate your layout and pass it to view holder
           return new VHHeader(null);
       }

        throw new RuntimeException("there is no type that matches the type " + viewType + " + make sure your using types correctly");
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        if (holder instanceof VHItem) {
            String dataItem = getItem(position);
            //cast holder to VHItem and set data
        } else if (holder instanceof VHHeader) {
           //cast holder to VHHeader and set data for header.
       }
   }

   @Override
    public int getItemCount() {
       return data.length + 1;
    }

    @Override
    public int getItemViewType(int position) {
       if (isPositionHeader(position))
           return TYPE_HEADER;

       return TYPE_ITEM;
   }

   private boolean isPositionHeader(int position) {
       return position == 0;
   }

   private String getItem(int position) {
       return data[position - 1];
   }

    class VHItem extends RecyclerView.ViewHolder {
        TextView title;

       public VHItem(View itemView) {
           super(itemView);
        }
    }

   class VHHeader extends RecyclerView.ViewHolder {
       Button button;

       public VHHeader(View itemView) {
           super(itemView);
       }
   }
}

您可以在recyclerView的第0个元素添加标题视图/TextView。 下面是一个很好的例子

编辑从上述链接复制源 :-

没有像listview.addHeaderView这样简单的方法,但可以通过向头的适配器添加类型来实现这一点

这里有一个例子

public class HeaderAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    private static final int TYPE_HEADER = 0;
    private static final int TYPE_ITEM = 1;
    String[] data;

    public HeaderAdapter(String[] data) {
        this.data = data;
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        if (viewType == TYPE_ITEM) {
            //inflate your layout and pass it to view holder
            return new VHItem(null);
       } else if (viewType == TYPE_HEADER) {
           //inflate your layout and pass it to view holder
           return new VHHeader(null);
       }

        throw new RuntimeException("there is no type that matches the type " + viewType + " + make sure your using types correctly");
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        if (holder instanceof VHItem) {
            String dataItem = getItem(position);
            //cast holder to VHItem and set data
        } else if (holder instanceof VHHeader) {
           //cast holder to VHHeader and set data for header.
       }
   }

   @Override
    public int getItemCount() {
       return data.length + 1;
    }

    @Override
    public int getItemViewType(int position) {
       if (isPositionHeader(position))
           return TYPE_HEADER;

       return TYPE_ITEM;
   }

   private boolean isPositionHeader(int position) {
       return position == 0;
   }

   private String getItem(int position) {
       return data[position - 1];
   }

    class VHItem extends RecyclerView.ViewHolder {
        TextView title;

       public VHItem(View itemView) {
           super(itemView);
        }
    }

   class VHHeader extends RecyclerView.ViewHolder {
       Button button;

       public VHHeader(View itemView) {
           super(itemView);
       }
   }
}

它还值得签出,它支持pullrefresh、loadingmore和header功能。

它还值得签出,它支持pullrefresh、loadingmore和header功能。

将textView作为项目放入RecyclerView将textView作为项目放入RecyclerView欢迎使用SO!你可能想考虑引用你链接到的文章的相关部分,以便在链接死掉的情况下信息仍然可用。欢迎来到!您可能想考虑引用您链接到的文章的相关部分,以便在链接死掉的情况下,信息仍然可用。