2015-10-01 141 views
1

我有一个RecyclerView,充满了固定大小的集合中的项目。RecyclerView和自定义项目类型

我想与广告中提供意见,例如,对于每一个3TH项目:

@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()?我的意思是说,物品数量会不同,然后收集真实物品的数量,而且位置不会相同,那么如何计算它们呢?

回答

2

对于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; 
} 
+0

Thanks!以及如何从传递给onBindViewHolder的位置计算收藏中物品的实际位置? – arts777

+1

你可以使用相同的计数原理: public int getItemPosition(int position){intl_local = position/3; 返回位置 - 广告; } – Nate

+0

不错!我会删除我的答案。 – mbmc