Android:获取recyclerview

时间:2016-12-14 11:01:33

标签: android android-recyclerview adapter onscroll

我正在实现具有多个布局的recyclerview。通常我们有不同布局的多个视图,并根据所需的布局覆盖其他方法。我已经成功实现了这一点。但是现在我有一个不同的场景,如:一个回收者视图,显示一些视频(比如3)然后是另一个布局(比如布局x),再次是3个视频,然后再次布局x等等。假设我有10个视频,那么在这种情况下,itemcount将是10 + 3,因为将显示3个布局x。但是滚动时加载视频。那么我如何确定要在getItemCount()中返回的视图数量;
我的意思是

@Override
public int getItemCount() {

      return ListofVideos.size() + "WHAT??"
}

布局就像这样 enter image description here

如果一次加载所有视频,那么很容易计算出视图的数量,就像我有21个视频一样,我将有27个视图(即21个视频和6个布局X视图)。但是当列表加载滚动时,我如何确定视图的数量?

1 个答案:

答案 0 :(得分:0)

Adapter负责填充视图,以便在RecyclerView(可能)只有视频链接的同时显示ListofVideos的所有观看次数。

每当您滚动RecyclerView时,Adapter都有责任夸大观看次数。

你应该做什么?

创建界面

public interface BaseItem {

    int ITEM_TYPE_HEADER = 0;
    int ITEM_TYPE_SUB_HEADER = 1;
    int ITEM_TYPE_ROW_NORMAL = 2;

    int getItemType();
}

使用适配器的视频项(如

)实现此界面
public class YourAdapterVideoItem implements BaseItem {

   // rest of your code

   @Override
   public int getItemType() {
       return ITEM_TYPE_ROW_NORMAL;
   }
}

创建适配器的标题项

public class YourAdapterHeaderItem  implements BaseItem {

    // rest of your code

    @Override
    public int getItemType() {
        return ITEM_TYPE_HEADER;
    }
}

使用

更新适配器
public class YourAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

   private List<BaseItem> items = new ArrayList<BaseItem>();

   @Override
    public BaseRecyclerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        BaseRecyclerViewHolder holder;
        switch (viewType) {
            case BaseItem.ITEM_TYPE_ROW_NORMAL:
            default:
                // inflate your default items
                break;
            case BaseItem.ITEM_TYPE_HEADER:
                // inflate your default items
                break;
        }
        return holder;
    }

    @Override
    public void onBindViewHolder(BaseRecyclerViewHolder viewHolder, int position) {
        BaseItem base = getItemAt(position);
        switch (base.getItemType()) {
            case BaseItem.ITEM_TYPE_HEADER:
                // populate your header view
                break;
            case BaseItem.ITEM_TYPE_ROW_NORMAL:
                // populate your actual view
                break;
        }
    }

    @Override
    public int getItemCount() {
        return items == null ? 0 : items.size();
    }

   @Override
    public int getItemViewType(int position) {
        return getItemAt(position).getItemType();
    }

    public BaseItem getItemAt(int position) {
        return items == null ? null : items.get(position);
    }
}

如果您想为视频添加标题使用YourAdapterHeaderItem,请使用YourAdapterVideoItem

希望这有帮助

修改

要在GridLayoutManager中添加标题,请查看RecyclerView GridLayoutManager with full width header