BannerAdsInRecyclerView
Show banner ads in recyclerView with multiple sizes
- Define your data list as following with
Object
typeprivate List<Object> mRecyclerViewItems = new ArrayList<>();
- Define your ads interval
final int adsInterval = 8;
- Calculate the size of the new data list after adding your banner ads in the recyler list
int contentItemsEvenSize = contentItems.size() % 2 == 0 ? contentItems.size():contentItems.size()+1;
int newLength = contentItems.size() + (contentItemsEvenSize/(adsInterval));
- Creat a new updatedfinal data list havving ads
int counter = 0;
for (int i = 0; i < newLength; i++) {
if(i % 5 == 0){
counter+=1;
mRecyclerViewItems.add(new AdsDM(new AdRequest.Builder().build()));
}else {
mRecyclerViewItems.add(contentItems.get(i-counter));
}
Log.i("onCreate", "Item["+i+"] = "+ mRecyclerViewItems.get(i).getClass().getSimpleName());
}
- Now make your banner ads to full width of the screen
GridLayoutManager manager = new GridLayoutManager(this, 2);
manager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
@Override
public int getSpanSize(int position) {
if(position % (adsInterval +1) == 0){
return 2;
}
return 1 ;
}
});
extend
yourRecyclerAdapter
withRecyclerView.Adapter<RecyclerView.ViewHolder>
- Override
getItemViewType
inRecyclerAdapter
class
@Override
public int getItemViewType(int position) {
if(mRecyclerViewItems.get(position) instanceof AdsDM){
return 2;
}
return 1;
}
- In
onCreateViewHolder
method check the current item is wether an ad or your content item as follows
@NonNull
@Override
public RecyclerView.ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
if(i == 2){
View adsView = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.add_item,viewGroup,false);
return new AdsViewHolder(adsView);
}
View textView = LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.text_item,viewGroup,false);
return new TextViewHolder(textView);
}
- In
onBindViewHolder
set your current itemView by checking its type
if(getItemViewType(i) == 2){
((AdsViewHolder)viewHolder).adView.loadAd(((AdsDM) mRecyclerViewItems.get(i)).getAdRequest());
view = ((AdsViewHolder) viewHolder).adView;
}else {
((TextViewHolder)viewHolder).textView.setText(((TextDM) mRecyclerViewItems.get(i)).getString());
view = ((TextViewHolder) viewHolder).textView;
}