我正在实现具有多个布局的recyclerview。通常我们有不同布局的多个视图,并根据所需的布局覆盖其他方法。我已经成功实现了这一点。但是现在我有一个不同的场景,如:一个回收者视图,显示一些视频(比如3)然后是另一个布局(比如布局x),再次是3个视频,然后再次布局x等等。假设我有10个视频,那么在这种情况下,itemcount将是10 + 3,因为将显示3个布局x。但是滚动时加载视频。那么我如何确定要在getItemCount()中返回的视图数量;
我的意思是
@Override
public int getItemCount() {
return ListofVideos.size() + "WHAT??"
}
如果一次加载所有视频,那么很容易计算出视图的数量,就像我有21个视频一样,我将有27个视图(即21个视频和6个布局X视图)。但是当列表加载滚动时,我如何确定视图的数量?
答案 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