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:
Update: Refer this video from google, it gives the complete explanation
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.
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; }
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; } }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With