如何在android中的RecyclerView项目之间添加动态视图?

我需要在RecyclerView的项目之间添加一个小条带。 此条带可以在列表中的不同数量的项目之后。 这需要动态完成。 我需要实现FitBit所做的事情: 在此处输入图像描述

我还需要第一行,即即使页面向下滚动,也可以将“本周”放在顶部。

  • RecyclerView在聊天屏幕上的notifyDataSetChanged上滚动到顶部
  • 扩充类RecyclerView时出错
  • StaggeredGridLayoutManager和移动项目
  • 当使用Runnable从Handler使用notifyItemChanged时,RecyclerView会崩溃
  • 使用SearchviewsearchRecyclerView
  • RecyclerView onBindViewHolder仅在getItemViewType更改时调用
  • 使用StickyHeaderRecyclerView库

    这是非常容易使用

    您应该使用getItemViewType(int)使用不同视图types的概念。 然后在onCreateViewHolder(ViewGroup,int)上,您可以检查应该膨胀/创建的types。

    例:

    @Override public int getItemViewType(int position) { // you should return the view type, based on your own dynamic logic } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { switch (viewType) { // handle each view type accordingly } } 

    您可以在RecyclerView使用多种视图types的概念,只需使用getItemViewType() ,并处理onCreateViewHolder()中的viewType参数。

    例如,您可以使用以下型号:

      public class Data{ int field1; float filed2; int rowType // 1,2,2,...N this will fill by you whenever you will //creating arraylist for your recyclerview } public class Custome Adapter extends RecyclerView.Adapter { ArrayList mItems; class ViewHolderRowType1 extends RecyclerView.ViewHolder { ... } class ViewHolderRowType2 extends RecyclerView.ViewHolder { ... } .... class ViewHolderRowTypeN extends RecyclerView.ViewHolder { ... } @Override public int getItemViewType(int position) { return mItems.get(position).rowType; //or //return positon%2; // This will based on your condition } @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { switch (viewType) { case 0: return new ViewHolderRowType0(...); case 1: return new ViewHolderRowType1(...); ... case N: return new ViewHolderRowTypeN(...); } } @Override public void onBindViewHolder(RecyclerView.ViewHolder vh, int position) { //Just check which view type is going to bind and then fill the data accordingly in your rows if(vh instanceof ViewHolderRowType1){ // Fill the data for first view type } else if (vh instanceof ViewHolderRowType2) { // Fill the data for second view type } else if (vh instanceof ViewHolderRowTypeN){ // Fill the data for Nth view type } } 

    对于粘性“此视图弱”,您可以将其添加到RecyclerView顶部,然后通过滚动RecyclerView的事件来处理它

    有两种方法可以实现这样的RecyclerView

    1. 在每个布局中添加标题并根据您的要求隐藏/显示(首选)。
    2. 或者为标题和内容使用两种不同的布局(不是优选的,因为它可能导致适配器中项目总数的问题)。

    在自定义POJO / GetterSetter类中,为headerStatus (boolean或int)添加一个字段,以标识是否显示标题。

    现在在适配器覆盖public int getItemViewType(int position)

     static final int TYPE_ITEM = 0; static final int TYPE_SEPARATOR = 1; @Override public int getItemViewType(int position) { if (mData.get(position).getHeaderStatus() == 0) return TYPE_ITEM; else return TYPE_SEPARATOR; } 

    如果你想以“正确”的方式进行,没有黑客,你应该编写自己的LayoutManager,并手动处理这些情况。 它并不像听起来那么难,但需要付出一些努力。