Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Embedding ads within Recyclerview

I am trying to upgrade my app from listview to recyclerview. When I was using listview I had embedded ads within the listview using this tutorial.

I am not able to add it within recyclerview similarly. Any views on how this is to be done in a Recyclerview?

Currently in my listview the code is as below for loading ads:

    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);     } 

This is how it should look:

ListView Items

Update: Refer this video from google, it gives the complete explanation

like image 895
Psypher Avatar asked Jan 15 '15 17:01

Psypher


People also ask

How do I add native ads to my android?

Load an Ad. Native ads are loaded via the AdLoader class, which has its own Builder class to customize it during creation. By adding listeners to the AdLoader while building it, an app specifies which types of native ads it is ready to receive. The AdLoader then requests just those types.


2 Answers

In your adapter, you first need to override getItemViewType, for example:

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

Then in onCreateViewHolder, inflate a different view according to the type. Something like this:

@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);       AdRequest adRequest = new AdRequest.Builder().build();         if (adRequest != null && v != null){             v.loadAd(adRequest);          }     }     else          v = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.list_item_layout, viewGroup, false);      RecyclerView.ViewHolder viewHolder = new RecyclerView.ViewHolder(v);     return viewHolder; } 
like image 70
Cigogne Eveillée Avatar answered Oct 14 '22 12:10

Cigogne Eveillée


How to add AD list items and don't skip content items and don't insert null items to content list?

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;             AdRequest adRequest = new AdRequest.Builder().build();             if (adRequest != null && holder.adView != null){                 holder.adView.loadAd(adRequest);              }     } }  private int getRealPosition(int position) {     if (LIST_AD_DELTA == 0) {         return position;     } else {         return position - position / LIST_AD_DELTA;     } } 
like image 28
Volodymyr Kulyk Avatar answered Oct 14 '22 12:10

Volodymyr Kulyk