您的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