Android:获得recyclerview中的视图数
问题描述:
我正在实现与多个layouts的recyclerview。通常我们有不同的布局的多个视图,并根据所需的布局覆盖其他方法。我已成功实现this.But现在我有一个不同的场景例如:回收视图,显示一些视频(比如说3),然后是另一个布局(比如布局x),再3个视频,然后再布局x等等。假设我有10个视频,那么在这种情况下,itemcount将是10 + 3 3布局x将显示。但视频在滚动时加载。因此,如何确定要在getItemCount()中返回的视图数量;
我的意思是Android:获得recyclerview中的视图数
@Override
public int getItemCount() {
return ListofVideos.size() + "WHAT??"
}
如果所有的视频都在加载后,它很容易计算的若干意见一样,如果我有21个视频,我将有共有27个视图(即21个视频和6个布局X视图)。但是当列表被加载滚动时,我如何确定视图的数量?
答
您的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