如何在分段回收视图中放置广告?

时间:2019-07-10 06:16:22

标签: android sections sectionedrecyclerviewadapter

我使用了名为“ IntruderShanky / SectionedRecyclerView”的分段回收器视图库。

节库Sections recycler view的链接

使用该库,我已经成功添加了带有子项的部分,但是问题是我必须在每10个项之后添加广告。

假设我有5个部分,每个部分有10个孩子,即

    void section_item_adder()
{

    for (int j=0;j<5; j++) {

        for (int i = 0; i < 10; i++) {
            childList.add(new Child(Section_filepath, Section_filename, false, FileSize_Check));

        }
        sectionHeaders.add(new SectionHeader(childList, "Group " + section_counter + "", section_counter + 1));

    }

}

对于子项,我将子类对象作为列表传递,但是我应该如何将原生广告作为子项传递给子节。

 public static final int ITEM_PER_AD = 10;

void SetAdsInAdapter()
{

    for(int i = 0; i < sectionHeaders.size();i+= ITEM_PER_AD)
    {

      final AdView adView = new  AdView (MainActivity.this);
      adView.setAdSize(AdSize.BANNER);
      adView.setAdUnitId(NATIVE_AD_ID);
   //   sectionHeaders.add(new SectionHeader(childList, "" ,section_counter+1));
     // adapterRecycler.a
     sectionHeaders.add(new SectionHeader(section_counter+1));

    }



}

1 个答案:

答案 0 :(得分:0)

这可以使用getItemViewType()方法完成。请注意onCreateViewHolder()中的viewType参数。

 public class MyAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {

   public final int ADS_VIEW_TYPE = 0; 
   public final int ITEM_VIEW_TYPE = 1;

   class ViewHolder0 extends RecyclerView.ViewHolder {
    ...
    public ViewHolder0(View itemView){
    ...
    }
   }

class ViewHolder2 extends RecyclerView.ViewHolder {
    ...
    public ViewHolder2(View itemView){
    ...
}

@Override
public int getItemViewType(int position) {
    // add ads viewType at each 10th position
    if(position % 10 == 0){
      return ADS_VIEW_TYPE;
    }
    return ITEM_VIEW_TYPE;
}

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
     switch (viewType) {
         case ADS_VIEW_TYPE: return new ViewHolder0(...);
         case ITEM_VIEW_TYPE: return new ViewHolder2(...);
         ...
     }
}

@Override
public void onBindViewHolder(final RecyclerView.ViewHolder holder, final int position) {
    switch (holder.getItemViewType()) {
        case 0:
            ViewHolder0 viewHolder0 = (ViewHolder0)holder;
            ...
            break;

        case 2:
            ViewHolder2 viewHolder2 = (ViewHolder2)holder;
            ...
            break;
    }
  }
}