RecyclerView和自定义项类型

时间:2015-10-01 18:24:18

标签: android android-recyclerview

我有一个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()?我的意思是项目计数与收集中的实际项目数不同,位置也不一样,那么如何计算它们呢?

1 个答案:

答案 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;
}