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

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

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

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

使用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,并手动处理这些情况。 它并不像听起来那么难,但需要付出一些努力。