Incrustar anuncios dentro de Recyclerview

Estoy intentando actualizar mi aplicación de listview a recyclerview. Cuando estaba usando listview, tenía anuncios incrustados dentro de la lista usando este tutorial .

No puedo agregarlo en recyclerview de manera similar. ¿Alguna opinión sobre cómo se debe hacer esto en una Recyclerview?

Actualmente, en mi lista de lista, el código es el siguiente para cargar anuncios:

if ((position % k) == 0) { if (convertView instanceof AdView) { return convertView; } else { // Create a new AdView AdView adView = new AdView(activity, AdSize.BANNER, ADMOB_ID); float density = activity.getResources().getDisplayMetrics().density; int height = Math.round(AdSize.BANNER.getHeight() * density); AbsListView.LayoutParams params = new AbsListView.LayoutParams( AbsListView.LayoutParams.FILL_PARENT, height); adView.setLayoutParams(params); adView.loadAd(new AdRequest()); return adView; } } else { return delegate.getView(position - (int) Math.ceil(position / k) - 1, convertView, parent); } 

Así es como debería verse:

Artículos ListView

Actualización: refiera este video de google, da la explicación completa

En su adaptador, primero debe anular getItemViewType, por ejemplo:

 @Override public int getItemViewType(int position) { if (position % 5 == 0) return AD_TYPE; return CONTENT_TYPE; } 

Luego, en onCreateViewHolder, infle una vista diferente según el tipo. Algo como esto:

 @Override public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) { View v = null; if (viewType == AD_TYPE) { v = new AdView(activity, AdSize.BANNER, ADMOB_ID); float density = activity.getResources().getDisplayMetrics().density; int height = Math.round(AdSize.BANNER.getHeight() * density); AbsListView.LayoutParams params = new AbsListView.LayoutParams(AbsListView.LayoutParams.FILL_PARENT,height); v.setLayoutParams(params); v.loadAd(new AdRequest()); } else v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.list_item_layout, viewGroup, false); RecyclerView.ViewHolder viewHolder = new RecyclerView.ViewHolder(v); return viewHolder; } 

¿Cómo agregar elementos de la lista de AD y no omitir elementos de contenido y no insertar elementos nulos en la lista de contenido ?

 private static final int LIST_AD_DELTA = 3; private static final int CONTENT = 0; private static final int AD = 1; @Override public int getItemViewType(int position) { if (position > 0 && position % LIST_AD_DELTA == 0) { return AD; } return CONTENT; } @Override public BaseRecyclerHolder onCreateViewHolder(ViewGroup parent, int viewType) { if (viewType == CONTENT) { return new ContentRecyclerHolder(parent, layoutId) { @Override protected void onCardClick(CardView card) { fragmentManager.showPagerFragmentWithTransition(card.getContext(), getRealPosition(getAdapterPosition())); } }; } else { return new AdRecyclerHolder(LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item_ad, parent, false)); } } @Override public int getItemCount() { int additionalContent = 0; if (data.size() > 0 && LIST_AD_DELTA > 0 && data.size() > LIST_AD_DELTA) { additionalContent = data.size() / LIST_AD_DELTA; } return data.size() + additionalContent; } @Override public void onBindViewHolder(BaseRecyclerHolder baseHolder, int position) { if (getItemViewType(position) == CONTENT) { ContentRecyclerHolder holder = (ContentRecyclerHolder) baseHolder; Content content = data.get(getRealPosition(position)); } else { AdRecyclerHolder holder = (AdRecyclerHolder) baseHolder; holder.adView.loadAd(); } } private int getRealPosition(int position) { if (LIST_AD_DELTA == 0) { return position; } else { return position - position / LIST_AD_DELTA; } } 

En su ArrayList, agregue valores nulos a las posiciones que desea mostrar anuncios

  for(int i=0;i 

Luego, en getItemViewType (),

  @Override public int getItemViewType(int position) { if(qlist.get(position)==null) return AD_TYPE; return CONTENT_TYPE; } 

Entonces,

 @Override public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View v = null; ViewHolder vh=null; if (viewType == AD_TYPE) { v=inflater.inflate(R.layout.adview_item, parent, false); vh=new AdviewHolder(v); } else { v = inflater.inflate(R.layout.cardview_items, parent, false); vh = new ContentViewHolder(v); } return vh; } 

Esto no omitirá ningún elemento, pero insertará anuncios en las posiciones requeridas.