我有一个RecyclerView,填充了固定大小的集合中的项目。
我想添加广告视图,例如,为每第3个项目添加一次:
@Override
public int getItemViewType(int position) {
return position % 3 == 0 ? TYPE_ADS : TYPE_ITEM;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view;
switch (viewType) {
case ItemTypes.TYPE_ITEM:
view = layoutInflater.inflate(R.layout.view_news_entries_item, parent, false);
break;
case ItemTypes.TYPE_ADS:
view = layoutInflater.inflate(R.layout.view_ads_item, parent, false);
break;
default:
throw new IllegalArgumentException("Invalid item type: " + viewType);
}
return new ViewHolder(view);
}
但是使用这种方法,我应该如何实现getItemCount()和onBindViewHolder()?我的意思是项目计数与收集中的实际项目数不同,位置也不一样,那么如何计算它们呢?
答案 0 :(得分:3)
对于OnBindViewHolder
:
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
if (holder.getItemViewType() == TYPE_ADS) {
// DO AD THINGS
} else {
// DO NORMAL ITEM THINGS
}
}
我相信getItemCount()
用于保持RecyclerView内部实际视图的计数(因此显示的所有项目包括广告。)您可能想要编写一个新方法获取项目的数量不是广告:
public int getRealItemCount() {
int ads = getItemCount() / 3;
return getItemCount() - ads;
}